求一个环形数组最大子数组的和
Posted 宁静致远123456
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求一个环形数组最大子数组的和相关的知识,希望对你有一定的参考价值。
假如我们输入一个一维的数组,数组中既有正数也有负数,而且这个数组首尾相接,就像一个圆圈。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值,如何用编程的语言实现?
设计思想:
1.首先定义一个数组与这个数组的长度,然后输入这个数组。
2.再定义一个新的数组,此数组把第一个数组的数字存储后再存储一次(用for循环进行数组信息的存储),例子:如第一个数组为4 5 6 ;则第二个数组为4 5 6 4 5 6 。
3.再定义三个 int 类型的变量, nowsum(保存暂时的和)、maxsum(保存和的最大值)还有 x(用于控制开始位置和子数组的最大长度,不能高于第一个数组的长度)。运用for循环进行对nowsum的更新,如果 nowsum>maxsum,则 maxsum 进行更新,反之不更新。例子:如第一个数组为4 5 6 ;则第二个数组为4 5 6 4 5 6 。nowsum 依次为4,4 5,4 5 6,5,5 6,5 6 4,……最终结果为15,子数组为4 5 6。
下面是具体的代码:
#include "stdafx.h" #include <stdio.h> int _tmain(int argc, _TCHAR* argv[]) { int i,k=0,count,count2,num1[100],num2[100]; printf("请输入数字个数,不超过50:"); scanf("%d",&count); count2=count*2; printf("请输入数字:"); for(i=0;i<count;i++) { scanf("%d",&num1[i]); } for(i=0;i<count2;i++) { if(i<count) { num2[i]=num1[i]; } else { num2[i]=num1[i-count]; } } int x=0,maxsum = 0,nowsum = 0; for(i=x;i<count+x;i++) { nowsum=nowsum+num2[i]; if(nowsum>maxsum) { maxsum=nowsum; } else { maxsum=maxsum+0; } if(i==count-1+x) { x++; if(x<count) { i=x-1; nowsum=0; } else { break; } } } printf("最大子数组的和:%d\\n",maxsum); return 0; }
最后附上我们合作的照片:
以上是关于求一个环形数组最大子数组的和的主要内容,如果未能解决你的问题,请参考以下文章