编写一个程序,依次读入整数直至文件尾,然后输出最大的连续值的和,例如:27 6 -50 21 -3 14 16 -8 42 33 -21 9
那么它的最大的连续值的和为115=21+(-3)+14+16+(-8)+42+33。

解决方案 »

  1.   

    1、定义变量T存放数列和,N存放当前数列起始位置,变量M存放最大值,变量A、B存放最大值数列的前后位置,
       初始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
      

  2.   

    #include<stdio.h>
    #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();
    }