zoukankan      html  css  js  c++  java
  • 求一个环形数组最大子数组的和

    假如我们输入一个一维的数组,数组中既有正数也有负数,而且这个数组首尾相接,就像一个圆圈。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值,如何用编程的语言实现?
    设计思想:
    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
    ",maxsum);
        return 0;
    }

     最后附上我们合作的照片:

  • 相关阅读:
    VirtualBox4.3.12 安装ubuntu 14.04 分辨率过小(600*480)问题的解决方法
    asp.net 权限管理系统
    rdlc 格式设置
    Could not load file or assembly 'Microsoft.ReportViewer.Common, Version=11.0.0.0 异常处理
    Asp.Net Web Forms/MVC/Console App中使用Autofac
    Mysql优化小记1
    Zyan 一个通信框架
    RDLC
    通过.NET客户端异步调用Web API(C#)
    ECharts问题--散点图中对散点添加点击事件
  • 原文地址:https://www.cnblogs.com/njzy123456/p/9899688.html
Copyright © 2011-2022 走看看