//注:本小队有三人,分别为王友军,黄瑞玻,白宇乾;因本班级人数为奇数,故如此

本次作业为返回整数数组中最大的子数组,应用c++编写,在visual c++ 2010 平台执行。

在编写过程中学会以下知识:

  1. 应用 int n;int *p=new int[n];开辟动态储存空间。满足输入动态数组的要求。
  2. 应用switch语句实现程序功能的多元化。
  3. 使用如下代码判断最大子数组之和。 for(int i=0;i<n;i++)
     {
      cin>>p[i];
     }
     int sum=p[0];
       int max_sum=p[0];
       for(int i=1;i<n;i++)
       {   
           if(sum>0)    //是否为正数
           { 
               sum=sum+p[i];  //是正数,做和。
              if(sum>max_sum) // 并判断是否为最大,是让其赋值给max_sum。
                { 
                    max_sum=sum;
                    end=i;
                }
           }
           else 
           { 
               sum=p[i];  //是负数,将第i+1个数的值赋值给和值sum
                  if(sum>max_sum)//并判断是否为最大,是让其赋值给max_sum。
                  {    
                     max_sum=sum;
                     star=i;
                     end=i;
                  }
           }
       }
       cout<<"最大子数组位置为第"<<star+1<<"个到第"<<end+1<<"个"<<endl;
       cout<<"最大子数组和为"<<max_sum<<endl;
  4. 应用p[i]=rand()输入随机数组。如果不再加任何条件时数组元素范围为零到32767 (2^16-1),其计算原理为:y=ax+b(mod n)其中,n一般是一个很大的素数,几万。 
    a也是大素数。而且a,b,n都是常数。所以rand的产生决定于x, 
    他被称为seed。 
    每一个seed都是上一次产生的y的函数。这样,如果直接取seed=y的话, 
    虽然产生的rand之间相关性甚小,但只要知道某个y,就能推知以后的rand。 
    为避免这种情况,一般取seed为y和当时计算机的时间的函数,如seed=y+t

    比如VC中对于rand()函数是如下实现的. 
    int __cdecl rand (void) 

    return(((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff); 
    }

  5. 如果想用rand函数输出负数时,可以这样应用:p[i]=-rand()%4000+2000;
     1 #include<iostream>
     2 #include<ctime>
     3 using namespace std;
     4 int main()
     5 {
     6     cout<<"数1601-2 20163980 \n黄瑞波"<<endl;;
     7     int m,n=0,star=0,end=0;
     8     cout<<"1.手动输入数组。\n2.随机生成数组。请选择功能:";//选择自己输入或者随机生成
     9     cin>>m;
    10     switch(m)
    11     {
    12         case 1:{
    13         int *p=new int[n];//开辟为n的存储空间
    14     cout<<"请输入数组的长度:";
    15     cin>>n;
    16     if(n<0)
    17     {
    18     cout<<"输入的数组长度有误,请重新输入!"<<endl;//判断数据有效性
    19     return 0;
    20     }
    21     cout<<"输入一个"<<n<<"维整型数组:";
    22     //以下算法代码参考与网络。
    23     for(int i=0;i<n;i++)
    24     {
    25         cin>>p[i];
    26     }
    27     int sum=p[0];
    28    int max_sum=p[0];
    29    for(int i=1;i<n;i++)
    30    {
    31        if(sum>0)    //是否为正数
    32        {
    33            sum=sum+p[i];  //是正数,做和。
    34           if(sum>max_sum) // 并判断是否为最大,是让其赋值给max_sum。
    35             {
    36                 max_sum=sum;
    37                 end=i;
    38             }
    39        }
    40        else
    41        {
    42            sum=p[i];  //是负数,将第i+1个数的值赋值给和值sum
    43               if(sum>max_sum)//并判断是否为最大,是让其赋值给max_sum。
    44               {
    45                  max_sum=sum;
    46                  star=i;
    47                  end=i;
    48               }
    49        }
    50    }
    51    cout<<"最大子数组位置为第"<<star+1<<"个到第"<<end+1<<"个"<<endl;
    52    cout<<"最大子数组和为"<<max_sum<<endl;
    53 };break;
    54         case 2:
    55             {
    56                 int *p=new int[n];
    57                 cout<<"请输入数组的长度:";
    58         cin>>n;
    59         if(n<0)
    60         {
    61         cout<<"输入的数组长度有误,请重新输入!"<<endl;
    62         return 0;
    63         }cout<<"随机数组为:";
    64         for(int i=0;i<n;i++)
    65     {
    66         p[i]=-rand()%4000+2000;
    67         cout<<p[i]<<" ";
    68     }
    69         cout<<endl;
    70         int sum=p[0];
    71    int max_sum=p[0];
    72    for(int i=1;i<n;i++)
    73    {
    74        if(sum>0)    //判断是否为正数
    75        {
    76            sum=sum+p[i];  //是正数,做和。
    77           if(sum>max_sum) // 并判断是否为最大,是让其赋值给max_sum。
    78             {
    79                 max_sum=sum;
    80                 end=i;
    81             }
    82        }
    83        else
    84        {
    85            sum=p[i];  //是负数,将第i+1个数的值赋值给和值sum
    86               if(sum>max_sum)//并判断是否为最大,是让其赋值给max_sum。
    87               {
    88                  max_sum=sum;
    89                  star=i;
    90                  end=i;
    91               }
    92        }
    93    }
    94    cout<<"最大子数组位置为:第"<<star+1<<"个到第"<<end+1<<"个"<<endl;
    95    cout<<"最大子数组和为:"<<max_sum<<endl;
    96             };break;
    97     }
    98       return 0;
    99 }

    运行结果截图为:

转载于:https://www.cnblogs.com/Kirito-math/p/9787955.html

整数数组的最大子数组相关推荐

  1. 整数数组中最大子数组求和02

    设计思路: 在"整数数组中最大子数组求和01"的基础上完成本次实验. 本次实验的关键在于如何判断结束. 经设计,程序结束条件有两种:1.截取部分有重复:2.循环完整两次. 满足其中 ...

  2. 结对开发——返回一个整数数组中最大子数组的和 (首尾相接版)

    一.题目及题目要求 题目:返回一个整数数组中最大子数组的和. 要求: (1)输入一个整形数组,数组里有正数也有负数. (2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. (3)如果 ...

  3. 返回一个首尾相接的二维整数数组中最大子数组的和

    题目: ·返回一个二维整数数组中最大子数组的和. 要求: ·输入一个二维整形数组,数组里有正数也有负数. ·二维数组首尾相接,象个一条首尾相接带子一样. ·数组中连续的一个或多个整数组成一个子数组,每 ...

  4. 返回一个二维整数数组中最大子数组的和(二人结对)

    题目:返回一个二维整数数组中最大子数组的和 要求:1.输入一个二维整型数组,数组里有正数也有负数. 2.二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和. 3.求所有子数组的和的最大值. ...

  5. 返回一个整数数组中最大子数组的和---环形数组

    一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]--A[j- ...

  6. 返回一个整数数组中最大子数组的和。

    一.要求: (1)输入一个整形数组,数组里有正数也有负数. (2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. (3)如果数组A[0]--A[j-1]首尾相邻,允许A[i-1],. ...

  7. 软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)

    题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为 ...

  8. 求二维整数数组中最大子数组的和(结对作业)

    题目:返回一个二维整数数组中最大子数组的和 要求:(1)输入一个二维整形数组,数组里有正数也有负数. (2)二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和. (3)求所有子数组的和最大 ...

  9. 求一个有一千个元素的整数数组的最大子数组的和

    求一个有一千个元素的整数数组的最大子数组的和 小组成员:司宇,滕达 设计过程: 设计界面: 在c#界面添加一些控件. 程序设计: 1.使用for循环和取随机数的函数产生一千个随机数并且将其赋值到数组中 ...

  10. nyoj983 首尾相连数组的最大子数组和

    首尾相连数组的最大子数组和 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是 ...

最新文章

  1. AI可以在游戏里称霸,但是解决现实问题太难了
  2. Beta阶段——第4篇 Scrum 冲刺博客
  3. 天啊!NBA球星将举办第一届科技峰会!
  4. SAP Cloud for Customer的Contact和Account的从属关系
  5. windows自动设置ip地址脚本
  6. IT人的春节对联集锦
  7. 【译】Simple MySQL ORM for C
  8. 从我玩SNS想到自己的核心力
  9. 主流编程语言的特点分析
  10. web安全:X老师告诉小宁他在cookie里放了些东西,小宁疑惑地想:‘这是夹心饼干的意思吗?’
  11. (译)快速指南:用UIViewPropertyAnimator做动画
  12. 3大场景、4款新品公开亮相:「低速智能驾驶」新赛道惹关注
  13. 视频教程-【深入理解计算机网络】“数制”视频课程-网络技术
  14. 金融统计分析python论文_比较好写的本科金融专业论文题目 本科金融专业论文题目怎么取...
  15. 数学专业英语 -- 组合分析和数值分析
  16. 设计模式-鸭子类型1
  17. 193页PPT读懂《数字化转型方法论》,强烈建议收藏!
  18. OpenCV深入学习(6)--直方图之calcHist使用(补)
  19. 简单而有韵味,让你get最浪漫的表白编程代码大全
  20. 苹果手机有锁那些事,小心被坑

热门文章

  1. 未经专业销密的计算机设备,DOC1-题
  2. 生成式对抗神经网络code实现
  3. 深度学习简单线性训练
  4. 1以下数字Oracle打印缺少0,Oracle SQL中缺少關鍵字
  5. const关键字在c语言的作用,C语言const关键字作用
  6. java遍历范型list_Java 集合(1)-- 俯瞰 Java 集合源码以及分类
  7. 入门深度学习,理解神经网络、反向传播算法是第一关
  8. 定点补码加减法运算_计算机相关问题:谈谈我眼中的补码
  9. python语言继承6.3节例6-1中的person_第6.3节 Python动态执行之动态编译的compile函数...
  10. pytorch卷积神经网络_使用Pytorch和Matplotlib可视化卷积神经网络的特征