求环形数组的最大子数组的和

思路:将环形数组展开成一维数组,在这个一维数组后再接上它本身,成一个长的一维数组。例如元素为123456的环形数组,展开成为元素为12345612345的一维数组,再求最大子数组的和,但是最大子数组的长度不能超过环形数组元素的个数。

代码:

#include<stdio.h>
int main()
{
int n,i;
printf("输入数组的长度");
scanf("%d",&n);
int a[n];
printf("输入数组元素\n");
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
a[i+n]=a[i];
}
for(i=0;i<(2*n-1);i++)
{printf("%2d",a[i]);}
int j;
int maxsum=0;
for(i=0;i<n;i++)
{int cursum=0;
for(j=i;j<n+i;j++)
{cursum+=a[j];
if(cursum>maxsum)
maxsum=cursum;
}
}
printf("\n");
printf("最大子数组和为:%d",maxsum);
return 0;
}

posted on 2018-11-04 17:36  YSong666  阅读(133)  评论(0)    收藏  举报

导航