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的范围大小,产生了理解上的错误使得一开始观察数据溢出出现了问题。这次编程很好的提高了我自己。

  • 相关阅读:
    matlab cell
    matlab linux 快捷键设置——有问题还是要解决
    latex 小结
    TOJ 1258 Very Simple Counting
    TOJ 2888 Pearls
    HDU 1248 寒冰王座
    TOJ 3486 Divisibility
    TOJ 3635 过山车
    TOJ 1840 Jack Straws
    HDU 4460 Friend Chains
  • 原文地址:https://www.cnblogs.com/hhhh12345/p/9787113.html
Copyright © 2011-2022 走看看