结对开发5_循环二维数组最大字数组
2015-04-03 12:46
204 查看
一、思想
我们这次的思想和一维数组的思想一样,但是考虑到是二维的,所以其算法和结对开发3的算法一样。即加长数组的列数
加以控制条件,最后求出最大子数组的和,并输出。
二、源代码
三、运行结果截图
四、总结
二维循环数组的实现方式和一维的并没有很大的差别,主要的差别是在实现求出最大的字数组上,
其他的和一位数组的实现方式一样。所以,在这次的实现中并没有遇到特别难的问题。
五、结对照片
我们这次的思想和一维数组的思想一样,但是考虑到是二维的,所以其算法和结对开发3的算法一样。即加长数组的列数
加以控制条件,最后求出最大子数组的和,并输出。
二、源代码
// 结对开发5.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" # include <iostream> # include <string> # define MaxRow 20 # define MaxCol 20 using namespace std; int Arr[MaxRow][MaxCol]; int Array[MaxRow][2*MaxCol]; int SumArr(int x1,int y1,int x2,int y2) //子数组求和 { int sum=0; for(int i=x1;i<x2;i++) { for(int j=y1;j<y2;j++) { sum+=Array[i][j]; } } return sum; } void LoadFile(int Arr[][MaxCol],int & Row,int & Col) { FILE * infile = fopen("D:\\input.txt","r"); int num[100]; int count=0; if(!infile) { cout<<"文件读取失败!"<<endl; exit(-1); } else { char str[10]; fscanf(infile,"%[^,]%*c",str); Row = atof(str); fscanf(infile,"%[^,]%*c",str); Col = atof(str); while(!feof(infile)) { fscanf(infile,"%[^,]%*c",str); num[count++]=atof(str); } } for(int i=Row-1;i>=0;i--) { for(int j=Col-1;j>=0;j--) { Arr[i][j]=num[--count]; } } for(int i=0;i<Row;i++) { for(int j=0;j<Col;j++) { Array[i][j] = Arr[i][j]; Array[i][j+Col] = Arr[i][j]; } } } //测试函数 int main() { int Row=0; int Col=0; LoadFile(Arr,Row,Col); for(int i=0;i<Row;i++) { for(int j=0;j<Col;j++) { cout<<Arr[i][j]<<"\t"; } cout<<endl; } int x1,y1; //代表左上角点的横纵坐标 int x2,y2; //代表右上角点的横纵坐标 int flag1,flag2,flag3,flag4; //(flag1,flag2)标识最大子数组的左上角坐标 (flag3,flag4)标识最大子数组的右下角坐标 flag1=flag2=flag3=flag4=0; int max = Array[0][0]; //max存储比较过程中的最大值 for(x1=0;x1<Row;x1++) { for(y1=0;y1<Col;y1++) { for(x2=x1+1;x2<=Row;x2++) { for(y2=y1+1;y2<=2*Col;y2++) { if((y2-y1) > Col) { break; } if(SumArr(x1,y1,x2,y2)>max) { max = SumArr(x1,y1,x2,y2); flag1=x1; flag2=y1; flag3=x2; flag4=y2; } } } } } cout<<"最大子数组为:"<<endl; for(int i=flag1;i<flag3;i++) { for(int j=flag2;j<flag4;j++) { cout<<Array[i][j]<<"\t"; } cout<<endl; } cout<<"该最大子数组的和为:"<<max<<endl; return 0; }
三、运行结果截图
四、总结
二维循环数组的实现方式和一维的并没有很大的差别,主要的差别是在实现求出最大的字数组上,
其他的和一位数组的实现方式一样。所以,在这次的实现中并没有遇到特别难的问题。
五、结对照片
相关文章推荐
- 软件工程结对开发之求二维数组中连续最大子数组之和2
- 结对开发4_循环数组的最大值
- 结对开发 二维数组的最大子数组和
- 二维数组最大子数组的和 结对开发
- 2、软件工程结对开发之求二维数组中连续最大子数组之和
- 结对开发--循环一维数组求最大子数组的和
- 结对开发 二维数组的最大子数组和
- 结对开发Ⅵ——循环二维数组求和最大的子数组
- 结对开发 随机产生二维数组并求最大子数组的和
- 结对开发Ⅱ—利用文本求二维数组最大的子数组的和
- 结对开发--求二维数组的最大子数组
- 软件工程结对开发之求二维数组中连续最大子数组之和
- 结对开发2(求二维数组的最大子数组和)
- 体验结对开发的乐趣(5)--(首尾相连的二维数组求最大子数组和的问题)
- 结对开发——循环数组的最大值
- 二维数组最大子数组的和 结对开发 溢出问题
- 结对开发之求二维数组的子数组的和的最大值2
- 结对开发求二维数组值最大的子数组(只要连续即可)
- 结对开发Ⅴ——循环一维数组求和最大的子数组
- 结对开发2__最大子数组