#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #define max(a,b) (a)>(b)?(a):(b) int arr[100][100]; int find(int* arr, int len){ int i; int max = arr[0]; for(i=1;i<len;i++){ arr[i] = max(arr[i],arr[i-1]+arr[i]); if(max<arr[i]) max = arr[i]; } return max; } void create(int m, int n){ srand(time(NULL)); int i,j; for(i=0;i<m;i++){ for(j=0;j<n;j++){ arr[i][j] = rand()%20-10; } } return; } void print(int m, int n){ int i,j; for(i=0;i<m;i++){ for(j=0;j<n;j++){ printf("%5d\t",arr[i][j]); } puts(""); } } void run(int m, int n){ create(m,n); print(m,n); int temp[100]; int i,j,k,k2; int max = -999; int start, end; for(i=0;i<m;i++){ for(j=i;j<m;j++){ memset(temp,0,sizeof(temp)); for(k=0;k<n;k++){ for(k2=i;k2<=j;k2++){ temp[k]+=arr[k2][k]; } } int f = find(temp,n); if(max<f){ start = i; end = j; max = f; } } } printf("The max block is %d %d %d\n",max,start,end); } int main(){ run(3,2); int temp[] = {8,-9}; printf("%d\n",find(temp,2)); return 0; }
先贴代码,后来改改
浙公网安备 33010602011771号