zoukankan      html  css  js  c++  java
  • 一维子数组成环后最大子数组的和

    组成员:
    姜中希 王召博
    设计思想(在后来实现过程中有改进):
    (1) 外层while循环控制结束(i=n)的时候停止。
    (2) 内层计算:按照不循环数组的方式计算,每当外层i增加1,数组更新,
    第i-1个数变为数组的第n个数,第i个数变为数组的第一个数,并进行
    最大子数组的和的求解。并将最大子数组的开头位置坐标记录入一个数组中,
    每次计算的最大和也存入一个数组中,最后进行比较得到最大和以及和最大子的数组的开头位置坐标。
    源代码:
    //2015/4/4
    #include<iostream>
    using namespace std;
    void max(int l,int *a)//当元素不全为负数的情况
    {
    int sum=0,j,p;
    for(int m=0;m<l;m++)//控制首元素是那一个
    {
    p=0;
    for(int i=m;i<l+m;i++)//控制比较的数组大小始终为l
    {
    if(p<0)
    {
    p=a[i];
    }
    else
    {
    p=p+a[i];
    }

    if(sum<p)
    {
    sum=p;
    j=i; //记录下当前最大子数组的最后一个元素的坐标
    }
    }
    }
    cout<<"最大子数组的和为:"<<sum<<endl;
    cout<<"最大子数组的元素位置为(从后往前输出):"<<endl;
    p=0,sum=0;
    int flag;
    for(int i=j-l+1;i<=j;i++)
    {
    if(a[i]>0)
    {
    flag=i;
    break;
    }
    }
    for(int i=j;i>=flag;i--)//从最后元素一个往前找寻找范围是l结果是从j到j-l+1范围内最大子数组的所有元素的下标
    {
    if(p<0)
    {
    p=a[i];
    }
    else
    {
    p=p+a[i];
    cout<<i%l+1<<" ";
    }
    if(sum<p)
    {
    sum=p;

    }

    }
    cout<<endl;
    }
    void main()
    {
    int n,count=0,mx;
    cout<<"请输入数组的长度:";
    cin>>n;

    int *a=new int[2*n];//申请一个动态数组数组的长度为2n
    cout<<"请输入数组元素:";
    for(int i=0;i<n;i++)
    {
    cin>>a[i];
    if(a[i]<0)
    {
    count++;
    }
    }

    if(count==n)//当数组元素全是负数的情况只需比较单个元素的大小并记下坐标
    {
    mx=a[0];
    int c=0;
    for(int i=1;i<n;i++)
    {
    if(a[i]>mx)
    {
    mx=a[i];
    c=i;
    }
    }
    cout<<"最大子数组的和为:"<<mx<<endl;
    cout<<"最大和子数组的位置是:"<<c+1<<endl;
    }
    else
    {
    for(int i=n;i<2*n-1;i++)
    {
    a[i]=a[i-n];//将输入的数组元素在此数组中存放两边但第二遍不用存最后一个因为用不着从而成为环
    }
    for(int i=0;i<2*n-1;i++)
    {
    cout<<a[i]<<" ";
    }
    cout<<endl;
    max(n,a);
    }

    }

    {
        mx

    屏幕截图:
      
    总结:
    首先我觉得用把数组再储存一遍看成环是个不错的想法,再就是要有欢迎错误的想法,当别人给自己指出错误或者可以改进的地方时不仅是自己的程序更加趋于完美,个人的能力和对于学习的态度也随之提高,最后就是环是对结队开发时任务分配感觉力不从心我不知道应该如何协调俩人的任务,可肯定有结对开发提高效率的方法,不然怎么会有那些成功的例子   ,需要在这方面提高。
  • 相关阅读:
    蝶恋花
    JVM解毒——JVM与Java体系结构
    超赞!IDEA 最新版本,支持免打扰和轻量模式!
    SpringBoot 结合 Spring Cache 操作 Redis 实现数据缓存
    神奇的 SQL 之 WHERE 条件的提取与应用
    终于放弃了单调的swagger-ui了,选择了这款神器—knife4j
    Git 高级用法,喜欢就拿去用
    既然有 HTTP 请求,为什么还要用 RPC 调用?
    SpringBoot和Spring到底有没有本质的不同?
    一条简单的更新语句,MySQL是如何加锁的?
  • 原文地址:https://www.cnblogs.com/xizhenghe/p/4429055.html
Copyright © 2011-2022 走看看