zoukankan      html  css  js  c++  java
  • 结对开发2-二维数组子矩阵和最大值

    一、设计思路

    (1)利用上一次的一维数组求最大值作为子函数。

    (2)求每行的最大值。

    (3)1、2行,2、3行,1、2、3行对应加变为一维数组,调用子函数求最大值。

    (4)比较所有最大值,求出二维数组子矩阵和最大值。

    二、源代码

    //作者:王炳午、董龙洋。日期:2015.3.24.
    #include <iostream>
    #include<stdlib.h>
    #include<time.h>
    using namespace std;
    int maxMax( int amax[])     //求最大
    {
    	int i,j;
    	int max;
    	int max_max;
    	max = 0;
    	max_max= 0;
    	for (i = 0; i < 5; i++)
    	{
    		max += amax[i];
    		if (max < 0)
    			max = 0;
    		if (max > max_max)
    			max_max= max;
    	}
    	if (max_max== 0)
    	{
    		for (int i=0;i<5;i++)
    		{
    			if (max_max==0)  
    			{  
    				max_max=amax[i];  
    			}  
    			else
    			{
    				if (max_max<amax[i])  
    				{  
    					max_max=amax[i];
    				}
    			}
    		}
    	}
    	return max_max;
    }
    
    int main()
    {
    	int a[3][5];
    	int i;
    	int j;
    	int overmax;
    	int max ;
    	int max_max;
    	int bmax[100];
    	int amax[10];
    	cout<<"---------------------求数组中子数组和的最大值的小程序----------------------"<<endl;
    	cout<<endl;
    	cout<<"得到的二维随机整数数组(3行5列)如下:"<<endl;
    	srand((unsigned)time(NULL));//随机数种子为当前计算机时间。
    	
    	for (i = 0; i < 3; i++)      //输入数组中的每个元素
    		for (j = 0; j < 5; j++)
    			a[i][j] =(rand() % 21 - 10);
    	
    	for (i = 0; i < 3; i++)        //每行数据比较;
    	{
    		max=0;
    		max_max=0;
    		for (j = 0; j < 5; j++)
    		{
    			max += a[i][j];
    			if (max < 0)
    				max = 0;
    			if (max > max_max)
    				max_max = max;
    		}
    		if (max_max == 0)
    		{
    			max_max = a[0][0];
    			for (j = 0; j < 5; j++)
    			{
    				if (max_max < a[i][j])
    					max_max = a[i][j];
    			}
    		}
    		bmax[i] = max_max;	       //0到2
    	}
    	for (j = 0; j < 5; j++)        //上中组合两两组合保存在amax数组
    	{
    
    		amax[j] = a[0][j] + a[1][j];
                                      	
    	}
    	bmax[3] =maxMax(amax); 
    
    	for (j = 0; j < 5; j++)        //中下组合两两组合保存在amax数组
    	{
    
    		amax[j] = a[1][j] + a[2][j];
    
    	}
    	bmax[4] = maxMax(amax);
    
    	for (j = 0; j < 5; j++)        //上中下组合两两组合保存在amax数组
    	{
    
    		amax[j] = a[1][j] + a[2][j] +a[0][j];
    
    	}
    	bmax[5] = maxMax(amax);
    
    	
    	
    
    
       for (i = 0; i < 3; i++)     //输出数组中每个元素
    		for (j = 0; j < 5; j++)
    		{
    			cout << a[i][j] << "	";
    			if ((j + 1) % 5 == 0)
    			{
    				cout << endl;
    			}
    		}
    		//求二维数组子矩阵最大值。
       overmax = bmax[0];
       for (i = 0; i < 6; i++)
    	{
    		if (overmax < bmax[i])
    		{
    			overmax = bmax[i];
    		}
    	}
    	cout <<"子矩阵和最大值为:"<< overmax <<endl;
    /*	for(i=0;i<6;i++)
    	{
    		cout<<bmax[i]<<"	";
    	}*/
    	return 0;
    }
    三、运行截图
    四、心得体会
    这次主要是队友编写代码,我俩一起修改调试,主要错误函数调用和逻辑错误。举例如下:
    正确代码:
    overmax = bmax[0];
       for (i = 0; i < 6; i++)
    	{
    		if (overmax < bmax[i])
    		{
    			overmax = bmax[i];
    		}
    	}
    错误代码:
    for (i = 0; i < 6; i++)
    {
      overmax = bmax[0];
      if (overmax < bmax[i]) 
    {
    overmax = bmax[i];
    }
    错误不分大小,有错就离正确结果很远。。。。。
    五、照片
    
    

      

  • 相关阅读:
    Erlang学习笔记2
    erlang的Socket参数含义
    Erlang 日期和时间处理、时间戳转换
    图(有向)-拓扑排序
    图(无向连通无权图)-广度优先搜索
    图(无向连通无权图)-深度优先搜索
    图(无向连通无权值图)深度优先生成最小生成树
    客户关系管理系统
    字符串类
    I/O流
  • 原文地址:https://www.cnblogs.com/dlyxx/p/4369525.html
Copyright © 2011-2022 走看看