返回一個環狀整數陣列中最大整陣列的和
阿新 • • 發佈:2018-11-04
一、設計思想
環狀陣列的特點是收尾相連,從而可以達到普通一維陣列不能達到的子陣列結組,所以我呼叫一個函式,函式中新定義一個數組,該陣列的元素個數為輸入陣列的2n-1,之後再對這個陣列以原陣列大小的方式依次找到這些陣列當中的最大子陣列,再在這些子陣列中找到最大的。
二、原始碼
#include<stdio.h>#define N 1000
#define INF 10000
int maxsubsum(int *arr,int n,int Size)
{
int sum=0;
int maxSum=-INF;
for(int i=n;i<n+Size;i++)
{
if(sum<0)
{
sum=arr[i];
}
else
{
sum+=arr[i];
if(maxSum<sum)
maxSum=sum;
}
}
return maxSum;
}
int seekmax(int *arr,int Size)
{
int m=arr[0];
for( int i = 0; i < Size; i++)
{
if(m<arr[i])
{
m=arr[i];
}
}
return m;
} int circlemax(int *arr,int Size)
{
int j;
j=2*Size-1;
int arr1[N];
for(int k=0;k<j;k++)
{
arr1[k]=arr[k];
if(k>Size-1)
arr1[k]=arr[k-Size];
}
int maxsub[N];
for(int k1=0;k1<Size;k1++)
{
maxsub[k1]=maxsubsum(arr1,k1,Size);
}
int max;
max=seekmax(maxsub,Size);
return max;
} int main()
{
int MSS;
int i;
int j=0;//計數器
int arr[N]={0};
char c;//用來判斷終止輸入
printf("Please input N nunmbers:\n");
for(i=0;i<N;i++)
{
scanf("%d",&arr[i]);
scanf("%c",&c);
j++;
if(c=='\n')
{
break;
}
}
printf("\n");
MSS=circlemax(arr,j);
printf("最大子陣列和=%d\n",MSS);
return 0;
} 三、執行結果截圖