軟體工程課後作業5:返回一個二維整數陣列中最大子陣列的和
阿新 • • 發佈:2019-01-10
要求:
輸入一個二維的整形陣列,數組裡有正數也有負數。
陣列中連續的一個或多個整陣列成一個二維子陣列,每個子陣列都有一個和。
求所有子陣列的和的最大值。——摘要
#include<iostream> #include <stdio.h> using namespace std; FILE *fpRead=fopen("input.txt","r"); char cgetchar(){ char c; fscanf(fpRead,"%c",&c); return c; } int getnum(){ char c; int num = 0, fuhao = 1; while((c = cgetchar()) != EOF && ('0' > c || '9' < c) && c != '-'); if(c == '-') fuhao = -1; else num = c - '0'; while((c = cgetchar()) != EOF && '0' <= c && '9' >= c){ num = num * 10 + c - '0'; } return num * fuhao; } int main () { int x,y,i,j,m=0,A[100][100]; x = getnum(); y = getnum(); if(x>100||y>100) { cout<<"請重新輸入:"; cin>>x>>y; } for(i=0;i<x;i++) { for(j=0;j<y;j++) { A[i][j] = getnum(); printf("%d ", A[i][j]); } printf("\n"); } int sum[100]={0},max=0,result=A[0][0]; for(i=0;i<x;i++) { while(m+i<x) { for(j=0;j<y;j++) { sum[j]=sum[j]+A[m+i][j]; } max=0; for(j=0;j<y;j++) { if(max+sum[j]>sum[j]) { max=max+sum[j]; } else { max=sum[j]; } if(max>result) { result=max; } } m++;//是子陣列的行數+1 } m=0; for(j=0;j<y;j++) { sum[j]=0; } } cout<<result; return 0; }