给定n个数(有正有负数),怎样求解最小的连续正子序列之和( 二 )


■网友
#include "stdio.h"#include "stdlib.h"#define random(x) (rand()%x)void creat_array(int a,int len,int max);void print_array(int a,int n);void main(){ printf("please input two numbers as the array\u0026#39;s length and the array\u0026#39;s max_number: \"); int n,max; scanf("%d,%d",\u0026amp;n,\u0026amp;max); int a; void creat_array(int a,int len,int max){ //产生一个随机正负数组 for(int i=0;i\u0026lt;len;i++){ a=random(max)-max/2; } } //int a={4,-1,5,-2,-1,2,6,-2}; //int a={4,-1,4}; creat_array(a,n,max); int min_sum_sqe(int a,int n){ //求出数组a的子序列的最小正子序列和 //任何一个子序列和都可表示成两个子序列之差ABCD序列,B序列可以表示成AB序列减去A序列。 int sum; int s=0; for(int i=0;i\u0026lt;n;i++){ sum=0; } for(int i=0;i\u0026lt;n;i++){ s+=a; sum+=s; } printf("产生的数组和是:\"); print_array(sum,n); int min; for(int i=0;i\u0026lt;n;i++){ if(a\u0026gt;0){ //因为是求最下正数,必须要保证min\u0026gt;0,不然下面代码中的if判断会失效 min=a; printf("min:%d \",min); break; } } int thismin; for(int j=0;j\u0026lt;n;j++){ thismin=sum; for(int k=j;k\u0026lt;n-1;k++){ thismin=sum-sum; if(thismin\u0026gt;0\u0026amp;\u0026amp;thismin\u0026lt;min){ min=thismin; printf("%d,%d,%d\",sum,sum,min); } } } return min; } int key=min_sum_sqe(a,n); printf("最小的正子序列和: %d\",key); printf("产生的随机数组:\"); print_array(a,n);} void print_array(int a,int n){ //打印随机数组 for(int i=0;i\u0026lt;n;i++){ ((i+1)%10==0)?printf("%4d \",a):printf("%4d ,",a); } }试了几组数据是对的,但是不敢肯定这个程序到底是不是正确的,由于不会平衡树,只能这样写了
■网友
请参考编程珠玑的相关章节,我记得有四种解法。
■网友
不太明白题目意思,最小的连续正子序列指子序列中所有元素必须都是正的,对吧?那n个元素中最小的那个正数不就是最小的连续正子序列吗?????我理解的有问题吗?


推荐阅读