最小子段和

来源:互联网 发布:excel2013破解软件 编辑:程序博客网 时间:2024/05/18 20:07

最小子段和

#include<stdio.h>#include<stdlib.h>#include<time.h>void main(){int i,j,k,t,n,s,smin,q[1000],a[1000];     t=time(0)%1000;srand(t);printf("请确定序列中的正负项个数n:");scanf("%d",&n);printf("序列中%d个整数为:",n);for(i=1;i<=n;i++){t=rand()%(4*n)+10;if(t%2==1)a[i]=-1*(t-1)/2;elsea[i]=t/2;printf("%d ",a[i]);}smin=0;q[0]=0;for(j=1;j<=n;j++){if(q[j-1]>=0)q[j]=a[j];elseq[j]=q[j-1]+a[j];if(q[j]<smin){smin=q[j];k=j;}}printf("\n最小子段和为:%ld\n",smin);for(s=0,i=k;i>=1;i--){s+=a[i];if(s==smin)break;}printf("最小子段从序列的第%d项到第%d项。\n",i,k);}