求整数组环中最大子数组的和升级版

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

额外要求:让数组手尾相连,构成一个环,允许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() == '\n')
		{
			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;
}

结果截图:

求整数组环中最大子数组的和升级版

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

更多相关文章
  • 求整数组里最大子数组的和
    题目:返回一个整数组中最大子数组的和 思路:先根据用户输入的随机数来判断输入数的个数,形成一个数组,再利用动态数组,求最大子数组之和,对每个数有两种情况,这个数前边的子数组和为负数,或者为正数,然后,如果是正数,判断加上自身是否更大,最后进行递归运算. 代码: //吕广浩 3/25 #include ...
  • 课堂练习求环整数组中最大子数组之和
    Scanner in= System.out.print("请输入一组数,以一个非整数结尾:" shuzu[jishuqi]= jishuqi++ sum=0 sum+= maxsum= shuzu[n]=shuzu[n+1 shuzu[jishuqi-1]= MAX= Syst ...
  • 返回一个整型数组中最大子数组的和
    组员:刘伟 李晨(http://www.cnblogs.com/jiajun1/  ) 1.题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n) ...
  • 题目:返回一个整型数组中最大子数组的和—第二部
    一.实验思路:1.定义一个整型数组num[n],随机生成数组中元素的值2.把这个整形数组连成环,就是把这个数组中的每一个元素都当一次头,邻接的左元素做尾,遍历一次数组,找出每一个元数组的子数组最大和,存放在max_a[]中3.定义一个二维数组dpo[n][2],dpo[i][0]不包含num[i]子 ...
  • 返回一个整型数组中最大子数组的和02
    组员:刘伟 http://www.cnblogs.com/Lw-1573/p/5323542.html 1.要求: 输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.如果数组A[0]……A[j-1]首尾相邻,允许A[i-1],…… A[n-1], ...
  • 返回一个整数数组中最大子数组的和升级版
    设计思路 运用clock()函数来计算运行程序花了多少时间.运用宏定义来控制数组的长度. 源程序代码 #include <iostream> #include <cstdlib> #include <ctime> using namespace std; #def ...
  • 求解数组环中最大子数组和的问题(java)
    HuanShuzu f = Scanner in= System.out.print("请输入数组长度:" System.out.print("请依次输入整数:" Arr[i]= System.out.print("您输入的数组环为 " S ...
  • 求一个整数数组中最大子数组的和
    题目:返回一个整数组中最大子数组的和 思路:让用户随机输入几个整数,首先获得用户输入数组的长度,然后设定一个为0的初值,以进行比较数字的正负,再利用动态数组,求最大子数组之和,对每个数有两种情况,这个数前边的子数组和为负数,或者为正数,然后,如果是正数,判断加上自身是否更大,最后进行递归运算. 程序 ...
一周排行
  • 2016年3月30日作业一.采购管理1.采购管理包括哪些过程?(记)    (1).编制采购计划.(2).编制询价计划.(3).询价.招投标.(4).供方选择.(5).合同管理.(6).合同收尾.2.编制采购计划过程 ...
  • 导出一个数据库结构mysqldump -u user_name -p -d –add-drop-table database_name > outfile_name.sql-d 没有数据 –add-drop-t ...
  • 摘要: 本节主要介绍两点:1.缓存问题 2.中文问题 缓存问题: 何谓缓存问题?即当浏览器的输入内容相同,即请求的URL相同,这样浏览器就会去读缓存,两次的内容一样,就不会和服务器端进行交互. 解决方式:在请求的ur ...
  • Windows 2003 Server 服务器自动定时重启(来自网络)随便新建一个文件如rebootsystem.cmd内容这样写:shutdown -r -f -t 30保存...把需要运行的其它应用程序加入到wi ...
  •       随着科学技术的不断发展,传动控制装置和机械设备已成为一个不可分割的整体.在<机电传动控制>这门课程中,我们将接触到电机传动控制的一般知识,我们需要掌握电动机.电器.晶闸管等电气元件的工作原理. ...
  •        预测有风险.责任须自担
  • SecureCRT的配置文件保存在C:\Documents and Settings\Administrator\Application Data\VanDyke\Config\Sessions下以连接机器IP地址为 ...
  • 八.数据库服务连接存储(MPIO)中连接ISCSI 共享存储在运行中输入iscsicpl,如图输入ISCSI 服务器IP地址:192.168.2.38,选择"快速连接",如图在快速连接对话框,选择 ...
  • 1024伐木累-小白篇之加班(前篇)-总章节二
    上期回顾:耗仔结束了大学生活,相恋多年的女友与他分手,调整心态后,他来到北京,找到了自己的 ...
  • ssy(*^__^*) 6不知你做过js的语法分析没有,我正在用antlr做js的语法分析,遇到两个难题,想向您请教:1.正则和除法的区分2.js匿名类和组合语句的区分 杨中科 2sorr ...