zoukankan      html  css  js  c++  java
  • 求整数组环中最大子数组的和(升级版)

    题目:返回一个整数数组中最大子数组的和

    额外要求:让数组手尾相连,构成一个环,允许a[n],a[0]...这种形式。同时返回最大子数组的位置

    设计思想:将环断开,成为一条线,分析这条线上的最大子数组,找到最大子数组,便可以找到最大子数组的起点和终点,然后将终点看作起点,将起点看作终点,将线连成环,在进行寻找最大子数组(寻找时不算上起点和终点),最后将先后找到的两个最大子数组连在一起就形成了这个整数组环的最大子数组,然后将记录的起点和终点输出出来,返回最大子数组的位置。

    出现的问题:无法输入更多的数,例如1000个

    可能的解决方案:定义更大范围的整形数组,但我用了 long,long long ,usinged long,usinged long long都不行

    代码:

    //吕广浩 3/27
    #include<iostream>
    #define n 100
    using namespace std;
    void main()
    {
    	int a[n], b[n][n];
    	int length, i, j, w = 0, p = 0, q = 0, temp, m;
    	cout << "输入随机整数" << endl;
    	for (length = 0;;)
    	{
    		cin >> a[length];
    		length++;
    		if (getchar() == '
    ')
    		{
    			break;
    		}
    	}
    	cout << "这个数组的长度为:" << length << endl;
    	//求子数组
    	for (i = 0; i<length; i++)//两次循环,进行排除法,判断每个数所构成的最大子数组
    	{
    		m = i;
    		w = 0;
    		j = 0;
    		while (j <= length - 1)
    		{
    			w += a[m];
    			b[i][j] = w;
    			m++;
    			if (m>length - 1)
    			{
    				m = 0;
    			}
    			j++;
    		}
    	}
    
    	temp = b[0][0];
    	for (i = 0; i<length; i++)//将每个数对应的最大子数组进行判断,最后得到整个整数组的最大子数组
    	{
    		for (j = 0; j<length; j++)
    		{
    			if (b[i][j]>temp)
    			{
    				temp = b[i][j];
    				p = i;
    				q = j;
    			}
    		}
    	}
    
    	cout << "最大子数组的值为:" << temp << endl;
    	cout << "最大子数组中元素的下标位子置:" << endl;
    	i = 0;
    	while (i <= q)
    	{
    		cout << p << "  ";
    		p++;
    		if (p >= length)
    		{
    			p = 0;
    		}
    		i++;
    	}
    
    	cout << endl;
    }
    

      结果截图:

    开发流程:

    日期和任务 听课 看书 网上查资料 编程 日总计
    周一 2   0 1 3
    周二         0
    周三   2   1 3
    周四 2   2   4
    周五   1 1 1 3
    周六     3 3 6
    周日          
    总计 4 3 6 6 19

    总结:这次程序思想很重要,由环到线,由平常到特殊,要考虑的情况也要全面。

    缺陷记录日志:未考虑数值超出范围是的情况

  • 相关阅读:
    09课堂问题整理
    08课堂问题整理
    Eclipse开发工具的编码问题
    【伸手党】需要我帮你Google/百度吗?
    IDEA更改左侧目录层级结构
    IDEA设置类和方法的注释
    一篇系列
    "Notice: unserialize(): Error at offset xx of xxx bytes"错误的处理(转载)
    git push命令每次都要输入用户名和密码的问题处理
    在网站添加qq客服功能
  • 原文地址:https://www.cnblogs.com/lvstudy/p/5324948.html
Copyright © 2011-2022 走看看