求一组数字子序列和中的最大值(代码实现)

题目:输入一组整数,求出这组数字子序列和中的最大值,只要求出最大子序列的和,不必求出最大值对应的序列。

最大子序列和:整数序列 A1, A2,... An (可能有负数),求 A1An 的一个子序列 AiAj,使得 Ai 到 Aj 的和最大。

例如:序列:0, -3, 6, 8, -20, 21, 8, -9, 10, -1, 3, 6, 5,则最大子序列和为 43。

 

代码如下:

 

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int main()
 5 {
 6     int i = 0, n = 1;
 7     int* a = (int*)malloc(n * sizeof(int));    //定义一个int*类型的指针a,它指向我们申请的1块int*类型大小为1int的内存首地址
 8     char ch;
 9     while ((ch = getchar()) != '\n') {    //当输入不是回车符时,继续输入
10         ungetc(ch, stdin);    //把字符ch推入到指定的流stdin中,以便它是下一个被读取的字符
11         scanf("%d", &a[i++]);    //输入整数,并将之存储到指针a在偏移i位后的位置
12         a = (int*)realloc(a, ++n * sizeof(int));    //重新申请内存,用于存储下个输入的整数
13     }
14 
15     int j, k, max;
16 
17     max = a[0];    //初始化最大值
18 
19     for (int j = 0; j < n - 1; j++)
20     {
21         int temp = a[0];    //temp暂存临时最大子序列的值
22         for (k = j + 1; k < n - 1; k++) {
23             temp += a[k];
24             if (temp > max)
25                 max = temp;
26         }
27     }
28 
29     printf("The maxmium seq is: %d\n", max);
30 
31     return 0;
32 }

 运行结果展示:

 

 

posted @ 2019-07-18 01:23  XMTam  阅读(1172)  评论(0)    收藏  举报