C:输出最大的连续值的和 编写一个程序,依次读入整数直至文件尾,然后输出最大的连续值的和,例如:27 6 -50 21 -3 14 16 -8 42 33 -21 9那么它的最大的连续值的和为115=21+(-3)+14+16+(-8)+42+33。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1、定义变量T存放数列和,N存放当前数列起始位置,变量M存放最大值,变量A、B存放最大值数列的前后位置, 初始T与M均为数列首项,N、A、B为02、如果有下一个数,取下一个数,加到T,否则到63、如果T>M,更新M=T,A=N,B=当前位置4、如果T<0,T=0,N=当前位置。(上一次的数列和已经小于0了不需要再作累加)5、至26、结束,[A, B]所在位置的数列和最大,其和为M #include<stdio.h>#define LENGTH 100main(){ int num,count,counter=0; int pre=0,last=0; int sum=0,maxSum=0; int numbers[LENGTH]; int flag=0; FILE *fin; fin=fopen("numbers.dat","r"); while(fscanf(fin,"%d",&num)!=EOF) { numbers[counter]=num; counter+=1; } for(count=0;count<counter;count++) { if(numbers[count]>0) { flag=1; break; } } if(flag) { last=counter-1; for(count=0;count<counter;count++) { printf("%d\t",numbers[count]); } printf("\n"); fclose(fin); for(count=0;count<counter;count++) { if(numbers[count]<=0) pre+=1; else break; } for(count=counter-1;count>0;count--) { if(numbers[count]<=0) last=(--counter)-1; else break; } sum=numbers[pre]; for(count=pre+1;count<=last;count++) { sum+=numbers[count]; if(sum<=0) { pre=count+1; break; } } sum=numbers[last]; for(count=last-1;count>=pre;count--) { sum+=numbers[count]; if(sum<=0) { last=count-1; break; } } for(count=pre;count<=last;count++) { maxSum+=numbers[count]; if(numbers[count]<0) printf("\b"); printf("%d+",numbers[count]); } printf("\b=%d\n",maxSum); } getchar();} 职场之乐 为何我相册上传不了图片? 疯了,sendto/recvfrom在编译时的错误。。。。。。 一个很难的问题,有哪一位高手能解决啊? 有没有像msn的聊天窗口中,发送button在edit控件里面的代码例子? Spin控件如何动态改变Dialog中其他控件,如EDIT的状态 关于中国移动通信互联网短信网关接口协议,请指教 关于自定义消息的问题 很简单的问题啊,快过来拿分啊?(多视图问题) 进度条怎样可以没有边框 在fromview中控件不能添加事件! win32服务程序怎样调用一个已有的console程序?
初始T与M均为数列首项,N、A、B为0
2、如果有下一个数,取下一个数,加到T,否则到6
3、如果T>M,更新M=T,A=N,B=当前位置
4、如果T<0,T=0,N=当前位置。(上一次的数列和已经小于0了不需要再作累加)
5、至2
6、结束,[A, B]所在位置的数列和最大,其和为M
#define LENGTH 100
main()
{
int num,count,counter=0;
int pre=0,last=0;
int sum=0,maxSum=0;
int numbers[LENGTH];
int flag=0; FILE *fin;
fin=fopen("numbers.dat","r"); while(fscanf(fin,"%d",&num)!=EOF)
{
numbers[counter]=num;
counter+=1;
} for(count=0;count<counter;count++)
{
if(numbers[count]>0)
{
flag=1;
break;
}
} if(flag)
{
last=counter-1; for(count=0;count<counter;count++)
{
printf("%d\t",numbers[count]);
} printf("\n");
fclose(fin); for(count=0;count<counter;count++)
{
if(numbers[count]<=0)
pre+=1;
else
break;
} for(count=counter-1;count>0;count--)
{
if(numbers[count]<=0)
last=(--counter)-1;
else
break;
} sum=numbers[pre];
for(count=pre+1;count<=last;count++)
{
sum+=numbers[count];
if(sum<=0)
{
pre=count+1;
break;
} } sum=numbers[last];
for(count=last-1;count>=pre;count--)
{
sum+=numbers[count];
if(sum<=0)
{
last=count-1;
break;
}
} for(count=pre;count<=last;count++)
{
maxSum+=numbers[count];
if(numbers[count]<0)
printf("\b");
printf("%d+",numbers[count]);
}
printf("\b=%d\n",maxSum); } getchar();
}