zoukankan      html  css  js  c++  java
  • 输出一个整数组中最大子数组的和

    作业要求:

             1.程序必须能处理1000个元素;

             2.每个元素是int32类型的,出现子数组之和大于整型表示的最大范围会出现什么情况;

             3.输入一个整形数组,数组里面既有正数也有负数;

             4.数组中连续的一个或多个整数组成一个字数组,每个子数组都有一个和;

             5.求所有子数组的和的最大值,要求时间复杂度为O(n)。

    设计思路:

           1.首先定义数组个数,然后选择是否使用随机数组

           2.随机数组则是利用srand(time(null))和rand同时作用来生成元素个数为n的随机数组并使用%限定返回使这1000个数都在10000到-10000范围内

           3.从第一个数开始做加法,若和大于第二个数,则继续加下一个数(若加上第三个数的和大于第三个数则重复进行此操作;小于第三个数,则舍掉前面的所有数,并继续重复进行此操作);若小于第二个数,则舍掉第一个数。

          4.取数的时候使用了远大于存储范围的数10个1000000000来观察(int32能表示的范围就是2的32次方,表示为数值是-2^(32-1) ~ 2^(32-1) -1)

    出现的问题:

        1.一开始不太了解C++出现了好多错误

         2.发现了好多不太会的c++语句,还有很多没考虑到的情况

    #include <iostream>
    #include<stdlib.h>
    #include<time.h>
    using namespace std;
    int main()
    {
     int i,c;
     int n;
     int a[1000];
     int max = 0;
     int b = 0;
     cout << "输入数组元素个数";
     cin >> n;
     cout << "是否使用随机数组:1.是 2.不是 3.观察数据溢出";
     cin >> c;
     if (c == 1)
     {
        srand(time(NULL));
        for (i = 0; i < n; i++)
      {
          a[i] = (rand() % 20000 - 10000);
       }
     }
     if (c == 2)
     {
        for (i = 0; i < n; i++)
        {
        cin>>a[i];
       }
     }
     if (c == 3)
     {
        for (i = 0; i < 10; i++)
        {
             a[i]=1000000000;
        }
     }
     cout << "数组为:" << endl;
     for (i = 0; i<n; i++)
     {
      cout << a[i] << ' ';
     }
     cout << endl;
     for (i = 0; i < n; i++)
     {
      b += a[i];
      if (b < 0)
       b = 0;
      if (b > max)
       max = b;
     }
     if (max == 0)
     {
      max = a[0];
      for (i = 0; i < n; i++)
      {
       if (max < a[i])
       {
        max = a[i];
       }
      }
     }
     cout << "最大子数组为:" << max << endl;
     system("pause");
     return 0;
    }
    数据溢出
    总结:这次编程发现了好多自身存在的问题,比如说编程语言的生疏和情况考虑的不周全,而且一开始也不是很明白int32的范围大小,产生了理解上的错误使得一开始观察数据溢出出现了问题。这次编程很好的提高了我自己。
     
  • 相关阅读:
    Hash基础相关知识点总结
    Java程序员简历模板
    nginx中C语言操作技巧学习
    C标准库中转换wchar_t和char类型的字符串
    golang中接口interface和struct结构类的分析
    oracle 使用occi方式 批量插入多条数据
    oracle 使用occi方式插入数据时中文乱码
    在linux下监控文件是否被删除或创建的命令
    QT 中设置按钮图片和文字的两种方法
    Windows操作系统下 使用c++ WIN32API禁用控制台最小化和关闭按钮
  • 原文地址:https://www.cnblogs.com/nanzhujue/p/9787088.html
Copyright © 2011-2022 走看看