求数组的任意连续子集和的最大值

设计思路:

1、随机输入一个数组,如sum5【5】,其各项元素的值为:5,-8,9,2,3;

2、数组中相邻两个数两两求和,放入一个长度为4的新数组中,命名为sum4,sum4【4】的各项元素为:-3,1,11,5;

3、数组中相邻的三个数求和,命名sum3【3】:6,3,14;

4、相邻四个数求和,sum2【2】:8,6;

5、五个数求和得:11;

6、从sum2~sum5中分别选出最大的数,和原数组sum5各项元素的和组成新的数组max【5】,其各项元素的值为:9,11,14,8,11;

7、将max【5】中各元素比较求得最大值14。

程序代码:

#include<stdio.h>
int main()
{
int a[5],sum=0,sum5[5],sum4[4],sum3[3],sum2[2],sum1,i,j,temp,max[5];
for(i=0;i<5;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<5;i++)
{
sum+=a[i];
sum5[i]=sum;
sum=0;
}
for(i=0;i<4;i++)
{
sum=sum+a[i]+a[i+1];
sum4[i]=sum;
sum=0;
}
for(i=0;i<3;i++)
{
sum=sum+a[i]+a[i+1]+a[i+2];
sum3[i]=sum;
sum=0;
}
for(i=0;i<2;i++)
{
sum=sum+a[i]+a[i+1]+a[i+2]+a[i+3];
sum2[i]=sum;
sum=0;
}
sum1=a[0]+a[1]+a[2]+a[3]+a[4];
for(i=0;i<5;i++)
{
for(j=i+1;j<5;j++)
{
if(sum5[i]<sum5[j])
{
temp=sum5[i];
sum5[i]=sum5[j];
sum5[j]=temp;
}
}
max[0]=sum5[0];
}
for(i=0;i<4;i++)
{
for(j=i+1;j<4;j++)
{
if(sum4[i]<sum4[j])
{
temp=sum4[i];
sum4[i]=sum4[j];
sum4[j]=temp;
}
}
max[1]=sum4[0];
}
for(i=0;i<3;i++)
{
for(j=i+1;j<3;j++)
{
if(sum3[i]<sum3[j])
{
temp=sum3[i];
sum3[i]=sum3[j];
sum3[j]=temp;
}
}
max[2]=sum3[0];
}
for(i=0;i<2;i++)
{
for(j=i+1;j<2;j++)
{
if(sum2[i]<sum2[j])
{
temp=sum2[i];
sum2[i]=sum2[j];
sum2[j]=temp;
}
}
max[3]=sum2[0];
}
max[4]=sum1;
for(i=0;i<5;i++)
{
for(j=i+1;j<5;j++)
{
if(max[i]<max[j])
{
temp=max[i];
max[i]=max[j];
max[j]=temp;
}
}}
printf("%d\n",max[0]);
}

运行结果:

posted @ 2018-10-07 20:09  叽里呱啦砰  阅读(976)  评论(0编辑  收藏  举报