求一组数字子序列和中的最大值(代码实现)
题目:输入一组整数,求出这组数字子序列和中的最大值,只要求出最大子序列的和,不必求出最大值对应的序列。
最大子序列和:整数序列 A1, A2,... An (可能有负数),求 A1
An 的一个子序列 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 }运行结果展示:


浙公网安备 33010602011771号