求最大联通子数组的和(结对开发)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求最大联通子数组的和(结对开发)相关的知识,希望对你有一定的参考价值。

结对伙伴:

纪烈翔

博客名:我们都是小怪兽

链接: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:

技术分享

技术分享

项目计划总结

技术分享

时间记录日志

技术分享

缺陷记录日志

技术分享

 

以上是关于求最大联通子数组的和(结对开发)的主要内容,如果未能解决你的问题,请参考以下文章

二维数组最大子数组(结对开发)

求最大子数组(结对开发)

求最大子数组(结对开发)

数组问题求二维整型数组最大联通子数组的和

求一维数组的最大子数组1(结对开发)

课堂练习;返回一个二维数组中最大子数组的和