二維陣列最大子陣列的和首尾相連

2022-05-27 04:00:22 字數 1285 閱讀 6214

#include

using namespace std;

#define n 4

void maxhe(int a,int &s,int &jmin,int &jmax)

int sum=a[0],b=a[0],x=0,y=0;

int    j=1;

while((j-xif(b>=0)          

b=a[j%n];

if(jx=j;

else

break;

else  

b+=a[j%n];  

if(sum>=b)  

j++;

sum=0;

for(int i=y+1;isum+=a[i%n];

s=sum;jmin=y+1;jmax=x+n-1;

int z=y%n;

if(x>=z)

j=1;sum=a[0];b=a[0];x=0;y=0;

while(jif(b<0)          

else  

b+=a[j%n];  

if(sum<=b)  

j++;

s=sum;jmin=x;jmax=y;

else if((x==0)&&(y==(n-1)))

sum=a[0];b=a[0];x=0;y=0;

for(int o=1;oif(a[o]>sum)

s=sum;jmin=x;jmax=y;

int main()

int a[n][n];

for(int i=0;ifor(int j=0;ja[i][j]=rand()%6;

if(rand()%2==1)

a[i][j]=a[i][j]*(-1);

cout<<"隨機生成的二維陣列為:"int max=a[0][0],c1=0,c2=0,l1=0,l2=0;

for(int i=0;ifor(int j=i;jint b[n]=;////////////////定義可以存放各行相加和的陣列

for(int k=0;kfor(int l=i;l<=j;l++)

b[k]+=a[l][k];

coutmaxhe(b,s,jmin,jmax);

if(s>=max)

coutfor(int j=c1;j<=c2;j++)

cout思路:從第一行開始,加一行加兩行,一直將所有的二維陣列轉換成幾個一維陣列,再將上次做的一維陣列首尾相接最大字數組合做成函式呼叫。

感受:每次都是她來程式設計,下次我一定自己編,不管能不能做出來吧,總得試試。

首尾相連的二維陣列最大子陣列求和

題目 返回乙個二維整數陣列中最大子陣列的和。要求 輸入乙個二維整形陣列,陣列裡有正數也有負數。二維陣列首尾相接,象個一條首尾相接帶子一樣。n陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。求所有子陣列的和的最大值。要求時間複雜度為o n 結對程式設計要求 兩人結對完成程式設計任務。一...

首尾相連陣列的最大子陣列和

1.求0 n 1的最大子陣列和 m 1 2.求跨越 n 1和0的最大子陣列和,分別求從0開始的最大和m 21,從n 1開始的最大和m 22,分別記錄得到最大和的位置pi,pj,這裡分兩種情況考慮 a.pib.pi pj,則求0 n 1的最小子陣列和m 3,及0 n 1的和mx m max m 1,m...

首尾相連陣列的最大子陣列和

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 給定乙個由n個整數元素組成的陣列arr,陣列中有正數也有負數,這個陣列不是一般的陣列,其首尾是相連的。陣列中乙個或多個連續元素可以組成乙個子陣列,其中存在這樣的子陣列arr i arr n 1 arr 0 arr j 現在請你這...