返回一个整数数组中最大子数组的和
设计思想:
输入一个长度为5的数组,第一次用每2个数按顺序组成4个子数组,对其求和;第二次用每3个数按顺序组成3个子数组,对其求和;第三次用每4个数按顺序组成2个子数组,对其求和;第四次用5个数求整个数组的和;然后求所有子数组和的最大值。
源程序代码:
#include<stdio.h>
int main()
{
	  int a[5],sum=0,sum5[5],sum4[4],sum3[3],sum2[2],sum1,m,n,temp,max[5];
  for(m=0;m<5;m++)
  {
    scanf("%d",&a[m]);
  }
  for(m=0;m<5;m++)
  {
    sum+=a[m];
    sum5[m]=sum;
    sum=0;
  }
  for(m=0;m<4;m++)
  {
    sum=sum+a[m]+a[m+1];
    sum4[m]=sum;
    sum=0;
  }
  for(m=0;m<3;m++)
  {
    sum=sum+a[m]+a[m+1]+a[m+2];
    sum3[m]=sum;
    sum=0;
  }
  for(m=0;m<2;m++)
  {
    sum=sum+a[m]+a[m+1]+a[m+2]+a[m+3];
    sum2[m]=sum;
    sum=0;
  }
  sum1=a[0]+a[1]+a[2]+a[3]+a[4];
  for(m=0;m<5;m++)
  {   
    for(n=m+1;n<5;n++)
    {   
      if(sum5[m]<sum5[n])
          {
            temp=sum5[m];
            sum5[m]=sum5[n];
            sum5[n]=temp;
          }
    }
    max[0]=sum5[0];
  }
  for(m=0;m<4;m++)
  {   
    for(n=m+1;n<4;n++)
    {   
      if(sum4[m]<sum4[n])
          {
            temp=sum4[m];
            sum4[m]=sum4[n];
            sum4[n]=temp;
          }
    }
    max[1]=sum4[0];
  }
  for(m=0;m<3;m++)
  { 
	    for(n=m+1;n<3;n++)
    { 
        if(sum3[m]<sum3[n])
          {
            temp=sum3[m];
            sum3[m]=sum3[n];
            sum3[n]=temp;
          }
    }
    max[2]=sum3[0];
  }
  for(m=0;m<2;m++)
  { 
      for(n=m+1;n<2;n++)
    {  
       if(sum2[m]<sum2[n])
          {
            temp=sum2[m];
            sum2[m]=sum2[n];
            sum2[n]=temp;
          }
    }
    max[3]=sum2[0];
  }
  max[4]=sum1;
  for(m=0;m<5;m++)
  {  
     for(n=m+1;n<5;n++)
    {   
      if(max[m]<max[n])
          {
            temp=max[m];
            max[m]=max[n];
            max[n]=temp; 
          }
    }
  }
  printf("%d\n",max[0]);
}
运行结果截图:

 
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号