0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C编程:“最大子数组的和” 的动态规划的解法

嵌入式技术 来源:嵌入式技术 作者:嵌入式技术 2022-08-21 09:33 次阅读

C编程笔试 --“最大子数组的和” 的动态规划的解法

 1.最大子数组之和

例1:数组int a1[5] = { -1, 5, 6, -7, 3 };其最大子数组之和为:5+6=11
例2:数组int a2[5] = { -5, -4, -8, -1, -10 };其最大子数组之和为:-1
例3:数组 int a3[5] = { -1, 5, 6, -7, 10 };其最大子数组之和为:5+6-7+10=14

  功能实现:

# include 
# include 
int MaxSum(int* arr, int size)
{
    int current = arr[0]; //当前数组最大和
    int max = current;

    for (int i = 0; i < size; i++)
    {
        if (current < 0)
            current = 0;
        current += arr[i];
        if (current > max)
            max = current;
    }
    return max;
}

int main(void)
{
    char x[40], y[40];

    int a1[5] = { -1, 5, 6, -7, 3 };
    int a2[5] = { -5, -4, -8, -1, -10 };
    int a3[5] = { -1, 5, 6, -7, 10 };

    int max1, max2, max3;
    max1 = MaxSum(a1, 5);
    max2 = MaxSum(a2, 5); //这个应该返回 -1, 
    max3 = MaxSum(a3, 5);
	printf("max1=%d,max2=%d,max3=%d\n",max1,max2,max3);
}

 2.获取最大子数组的开始和结束的下标

  如果我需要返回值返回这个最大子数组的开始和结束的下标,你要怎么修改这个程序?

例1:数组int a1[5] = { -1, 5, 6, -7, 3 };其最大子数组之和为:5+6=11;最大子数组开始和结束下标为:1 2。
例2:数组int a2[5] = { -5, -4, -8, -1, -10 };其最大子数组之和为:-1;最大子数组开始和结束下标为:3 3。
例3:数组 int a3[5] = { -1, 5, 6, -7, 10 };其最大子数组之和为:5+6-7+10=14 ; 最大子数组开始和结束下标为:1 4。
例4:数组 int a3[] = {-2, -1, -3, 4, -1, 2, 1, -5, 4};其最大子数组之和为:4+(-1)+2+1=6 ; 最大子数组开始和结束下标为:3 6。
  功能实现:

#include 
#include 
void solution(int m, int *arr){
    int current=arr[0];
    int max=current;
    int start=0,end=0;
    int i=0;
    /*计算最大子数组之和*/
    for(i=1;imax)
        {
            max = current;
            end=i;//最大子数组结束下标
        }
    }
	int temp=max;
	/*计算最大子数组结束下标*/
    for(i=end;i>=0;i--)
    {
	  temp-=arr[i];
      if(temp<=0 || temp>max)break;
    }
	if(i<0)i=0;
    start=i;
    printf("%d,%d %d\n",max,start,end);
}
int main() {
    int n;
	printf("输入个数:");
    scanf("%d", &n);
    int *arr;
    arr = (int*)malloc(n * sizeof(int));
	printf("输入%d个整数:",n);
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    solution(n, arr);
    return 0;
}
;i++)>

  运行结果:

pYYBAGMBfYaAP_I9AAMUkvwWkUo576.png#pic_center

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136696
  • 数组
    +关注

    关注

    1

    文章

    417

    浏览量

    25939
收藏 人收藏

    评论

    相关推荐

    数组的下标为什么可以是负数

    最近有同学发来这样一段代码,并提出一个问题,数组的下标为什么可以是负数?     #include int main(){ const char *s = "helloworld"; const
    的头像 发表于 12-20 11:18 66次阅读

    数组名之间可以直接赋值吗

    数组之间的赋值能不能直接使用等于号?比如这样的代码。 int main(){ int a[5] = {1, 2, 3, 4, 5}; int b[5] = {0}; b = a
    的头像 发表于 11-26 11:23 134次阅读

    指针数组和二维数组有没有区别

    指针数组和二维数组有没有区别?比如这样的两个代码。 int main(){ char *s1[] = { "hello", "world", "total" }; char s2[][6
    的头像 发表于 11-24 11:12 140次阅读

    C语言数组应用计算机导论A第6讲:数组

    C语言数组应用计算机导论A第6讲:数组
    发表于 11-20 15:33 0次下载

    解读版|Air780E软件中C语言内存数组的神秘面纱!

    今天我们来揭开Air780E 软件中 C 语言内存数组的神秘面纱,希望有所收获。
    的头像 发表于 11-17 10:00 230次阅读
    解读版|Air780E软件中<b class='flag-5'>C</b>语言内存<b class='flag-5'>数组</b>的神秘面纱!

    C语言中的socket编程基础

    Socket编程简介 Socket是一种通信机制,允许程序之间进行通信。在C语言中,socket编程是网络编程的基础。通过使用socket,程序可以发送和接收数据,实现不同计算机之间的
    的头像 发表于 11-01 16:51 302次阅读

    动态编程增益放大器

    电子发烧友网站提供《动态编程增益放大器.pdf》资料免费下载
    发表于 09-07 10:43 0次下载
    <b class='flag-5'>动态</b>可<b class='flag-5'>编程</b>增益放大器

    labview字符串数组转化为数值数组

    在LabVIEW中,将字符串数组转换为数值数组是一项常见的任务,尤其是在处理数据采集、信号处理或用户输入时。 1. 理解LabVIEW的数据类型 在开始之前,了解LabVIEW中的数据类型是非
    的头像 发表于 09-04 17:47 2260次阅读

    嵌入式中零长度数组基本操作方法

    C语言零长度数组,听起来可能有点奇怪,因为它没有分配内存空间,无法存储数据。但实际上,零长度数组在Linux内核中随处可见。 零长度数组的定义 首先,我们要明白什么是零长度
    的头像 发表于 05-11 08:49 924次阅读
    嵌入式中零长度<b class='flag-5'>数组</b>基本操作方法

    深入探索KUKA KRL中的数组应用

    如果 CHAR 类型数组的所有数组元素都拥有相同的字符串,则不必单独初始化每个数组元素。忽略右侧的数组下标。(对于一维数组下标,不写下标。)
    的头像 发表于 04-18 10:37 1230次阅读
    深入探索KUKA KRL中的<b class='flag-5'>数组</b>应用

    嵌入式系统中C语言结构体的基础实现与应用

    C语言中的数组只能允许程序员定义存储相同类型数据。但是结构是C语言编程中允许您存储不同数据类型的数据。
    发表于 03-12 14:29 494次阅读
    嵌入式系统中<b class='flag-5'>C</b>语言结构体的基础实现与应用

    数组和链表在内存中的区别 数组和链表的优缺点

    数组和链表在内存中的区别 数组和链表的优缺点  数组和链表是常见的数据结构,用于组织和存储数据。它们在内存中的存储方式以及优缺点方面存在一些显著的差异。本文将详细探讨这些差异以及它们的优缺点。 1.
    的头像 发表于 02-21 11:30 1023次阅读

    可以在CY8C5888LTQ-LP097设备中编程最大i2c通道数是多少?

    我可以在CY8C5888LTQ-LP097设备中编程最大i2c通道数是多少?
    发表于 01-22 06:49

    PHP中数组的使用方法!

    PHP中数组的使用方法! PHP是一种广泛使用的网络编程语言,它的数组功能非常强大且灵活。数组是一种数据结构,它允许我们在单个变量中存储多个值。 在本篇文章中,我将详细解释PHP
    的头像 发表于 01-12 15:11 540次阅读

    labview怎么查数组中相同元素的个数

    要查找LabVIEW中数组中相同元素的个数,可以使用以下步骤: 创建一个包含要查找的数值的数组。这可以通过手动输入数组元素或从文件/其他数据源导入数组实现。 使用“For Loop”结
    的头像 发表于 12-28 16:42 3486次阅读