zoukankan      html  css  js  c++  java
  • 数组2

     设计思想:
    此次的实验沿用上次的算法,实现数组首尾相接可以将数组长度扩大一倍,后面的一半赋值前面数组的数值,经过N次循环,让数组每一位元素分别作首位,在此向后数N位,则为此次循环的数组,分别计算每次的最大子数组,将N个最大子数组和存入另一个数组中,经过比较得出最大的一个子数组和。
    此程序另一难点在于要把数字定义为int32型,不要忘了把求和部分定义成更大的数字类型,才不会溢出。
    组成员吕兰兰网址:http://www.cnblogs.com/lvlan/

    //禹慧慧 吕兰兰 2016.3.26
    //将数组看成环形,首尾相接,数组元素个数最多1000,数组元素为32位,计算最大子数组的元素之和
    #include<iostream>
    #include<time.h>
    #define RAND16 ((rand()<<1) + (rand()&1))
    using namespace std;
    int main()
    {   
        srand(time(0));
        _int32 Array_a[2000];
        long long Array_max[1000];//存放每个子数组的最大数组之和
        long long arrayOfmax;//存放最后结果最大数
        int N;//随机生成数组元素个数
        N=rand()%1000+1;
        cout<<"数组元素个数为:"<<N<<endl;
        for(int i=0;i<N;i++)
        {
            Array_a[i]=(RAND16 << 16) + RAND16;//生成32位数组元素
        }
        //将数组复制一遍加宽数组的长度
        for(int i=0;i<N;i++)
        {
            Array_a[N+i]=Array_a[i];
        }
        for(int i=0;i<N;i++)
        {
            cout<<Array_a[i]<<"  ";
            if((i+1)%5==0){cout<<endl;}
        }
        cout<<endl;
        //求每个圆环的N个数组的最大的子数组
        for(int j=0;j<N;j++)
        {
            
            long long max=0;
            long long sum=0;
            for(int i=j;i<(N+j);i++)
           {
              sum+=Array_a[i];//将每位求和赋给sum
               if(Array_a[i]>=0)
              {
                 if(max<sum)
                {
                   max=sum;
                }
    
              }
                 if(sum<0)
                {
                   sum=0;
                 }
           }
            if(max==0)
            {
                max=Array_a[0];
               for(int i=j;i<N+j;i++)
              {
                if(Array_a[i]>max)
                 max=Array_a[i];
              }
            }
            Array_max[j]=max;    
      }
        cout<<"The max array is:";
        arrayOfmax=Array_max[0];
        for(int k=1;k<N;k++)
        { 
            if(arrayOfmax<Array_max[k])
            {
                arrayOfmax=Array_max[k];
            }
        }
        cout<<arrayOfmax<<endl;
    
    return 0;    
    }
      
    

      

    运行结果:

    总结:

    程序还是很不完善,最后出现了意料之外的错误,有计算错误,却找不出出错的地方。孟晨助教为我们提出了一下的问题:

    * 程序计算环状列表最大子序列和正确,但没有给出子序列的位置

    * 没有代码复审或测试,或有复审和测试但仍有明显漏洞

    * 没有总结分析;或总结中没有实际内容:对本次编程的分析或遇到的问题和解决方法

  • 相关阅读:
    邪恶的强制数据转换
    知识普及
    判断是否为一个数字
    parseInt
    webpack学习记录
    数组隐藏属性
    elasticSearch基本使用
    elasticsearch安装和部署
    neo4j索引
    spark yarn 提交作业
  • 原文地址:https://www.cnblogs.com/yhhzxcvbnm/p/5322985.html
Copyright © 2011-2022 走看看