标签:
结对伙伴:
纪烈翔
博客名:我们都是小怪兽
链接:http://www.cnblogs.com/qwer113/
设计思想:
1:在c++默认路径下创建input.txt
2:在txt中输入矩阵的行、列,以及对应的数
3:按列遍历,求出没列最大子数组,再求出相应结果
程序源代码
1 //返回二维整数组中最大联通子数组的和
2 //2016/4/4
3 #include<iostream>
4 using namespace std;
5 #include<fstream>
6 int zuida(int n, int a[], int *sm, int *mm);
7
8 void main()
9 {
10 int m, n, i, j, sm, mm, t2;
11 int sum, max;
12 char A[100];
13 int up[100], down[100], t[100];
14 int a[100][100], b[100];
15 cout << "请输入要读入的文件名:";
16 cin >> A;
17 ifstream infile;
18 infile.open(A, ios::in);
19 if (infile.is_open() == false)
20 {
21 cerr << "open error!" << endl;
22 exit(1);
23 }
24 //输入二维数组的行和列
25 infile >> m;
26 infile >> n;
27 for (i = 0; i<m; i++)
28 {
29 for (j = 0; j<n; j++)
30 {
31 infile>> a[i][j];
32 }
33 }
34 //求最大和
35 for (i = 0; i<m; i++)
36 {
37 for (j = 0; j<n; j++)
38 {
39 b[j] = a[i][j];
40 }
41 sum = zuida(n, b, &sm, &mm);
42 up[i] = sm;
43 down[i] = mm;
44 t[i] = sum;
45
46 }
47 t2 = t[0];
48 for (i = 0; i + 1<m; i++)
49 {
50 if (up[i] <= down[i + 1] && down[i] >= up[i + 1])
51 {
52 t2 += t[i + 1];
53 }
54 for (j = up[i]; j<up[i + 1]; j++)
55 {
56 if (a[i + 1][j]>0) t2 += a[i + 1][j]; //判别独立正数
57 }
58
59 }
60
61 //在屏幕上输出
62 cout << "二维数组的行" << m << endl;
63 cout << "二维数组的列" << n << endl;
64
65 for (i = 0; i<m; i++)
66 {
67 for (j = 0; j<n; j++)
68 {
69 cout << a[i][j] << " ";
70 }
71 cout << endl;
72 }
73 cout <<"最大和"<< t2 << endl;
74
75 }
76
77
78 int zuida(int n, int a[], int *sm, int *mm)
79 {
80 int b[100] = { 0 };
81 int i, sum1 = 0, max1 = 0;
82 for (i = 0; i<n; i++)
83 {
84 if (sum1<0)
85 {
86 sum1 = a[i];
87 }
88 else
89 {
90 sum1 = sum1 + a[i];
91 }
92 b[i] = sum1;
93 }
94 max1 = b[0];
95 for (i = 0; i<n; i++)
96 {
97 if (max1<b[i])
98 {
99 max1 = b[i];
100 *mm = i;
101 }
102 }
103 for (i = *mm; i >= 0; i--)
104 {
105 if (b[i] == a[i])
106 {
107 *sm = i;
108 break;
109 }
110 }
111 return max1;
112 }
测试用例
1:


2:


项目计划总结

时间记录日志

缺陷记录日志

标签:
原文地址:http://www.cnblogs.com/qwer112/p/5359877.html