• 结对编程之数组长度要求和大数溢出


    1.题目:

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

    2.要求:

    1)要求程序必须能处理1000个元素;

    2)每个元素都是int32类型的。

    3.设计思路:

    处理1000个元素时让用户自己输入想要的数组长度,看看运行时出处理时间的长短,再在源程序中改善这一问题。

    处理大数溢出时,由于随机函数生成的数不算太大,我们尽量让其最终存入数组的元素接近最大范围,进而求和时才可能出现大数溢出的情况。

    4.源代码:

    复制代码
     1 #include<iostream>
     2 #include<stdlib.h>
     3 using namespace std;
     4 #include <ctime>
     5 #include <cstdlib>
     6 #define MAX 100000
     7 int main()
     8 {
     9     int k,t=0,o=0;
    10     int n=0,m=0;
    11     int b[MAX];
    12     int a[MAX];
    13     cout<<"请输入数组中整数的个数:"<<endl;
    14     cin>>k;
    15     srand(time(0));
    16     for(int i=0;i<k;i++)
    17     {
    18         a[i]=rand()%100-50;
    19         cout<<a[i]<<" ";
    20     //    cin>>a[i];
    21     }
    22     
    23     for(int l=1;l<k+1;l++)
    24     {
    25         for(i=0;i<k-l+1;i++)
    26         {
    27             for(int j=i;j<i+l;j++)
    28             {
    29                 if(j>k-1)
    30                 {
    31                     break;
    32                 }
    33                 else
    34                     m=m+a[j];
    35             }
    36             b[n]=m;
    37             m=0;
    38             n=n+1;
    39         }
    40     }
    41     int max=b[0];
    42     for(i=1;i<n;i++)
    43     {
    44         if(max<b[i])
    45             max=b[i];
    46     }
    47 /*    for(i=0;i<n;i++)
    48     {
    49         if(max==b[i])
    50         {
    51             m=i;
    52         }
    53     }
    54     m=m+1;
    55     int r=k;
    56     for(int j=0;j<k;j++)
    57     {
    58         if(m>=r&&r>=0)
    59         {
    60             m=m-r;
    61             t=t+1;
    62             r=r-1;
    63         }
    64         if(m==0&&r>0&&j!=k-1)
    65         {
    66             m=m+r+1;
    67             break;
    68         }
    69         if(m==0&&r==0&&t==k)
    70         {
    71             m=m+1;
    72             break;
    73         }
    74     }*/
    75     cout<<endl;
    76     cout<<"该数组中的最大子数组的和为:"<<max<<endl;
    77     /*cout<<"这些数字为:";
    78     m=m-1;
    79     if(t==0)
    80     {
    81         t=1;
    82     }
    83     for(i=m;i<m+t;i++)
    84     {
    85         cout<<a[i]<<"   ";
    86     }
    87     for(i=0;i<n;i++)
    88         cout<<b[i]<<" ";*/
    89     return 0;    
    90 }
    复制代码

    5.结果截图:

    6.心得体会:

    本次重点在于大数溢出的解决,我们首次实现大数溢出时多次出现程序异常关闭的情况,即使可以运行时也不提示错误。对于这一点的解决,我们想到了数组元素随机生成过大时则重新生成,也可以对结果进行判断,主动提示错误进而解决。但我们对于真正解决大数溢出还没有具体的解决方案,这算是我们的不足吧,日后一定多多注意这一点。

  • 相关阅读:
    SSRF
    【Floyd(并非水题orz)】BZOJ4093-[Usaco2013 Dec]Vacation Planning
    【SPFA+二分答案】BZOJ1614- [Usaco2007 Jan]Telephone Lines架设电话线
    【刷水-贪心】BZOJ1629-[Usaco2007 Demo]Cow Acrobats
    【刷水-二分答案】BZOJ1650 & BZOJ1639
    【UOJ244】[UER7]短路
    【尺取法好题】POJ2566-Bound Found
    【尺取法】POJ3061 & POJ3320
    【hash】BZOJ3751-[NOIP2014]解方程
    【最小点覆盖】POJ3041-Asteroids
  • 原文地址:https://www.cnblogs.com/zhengt/p/4378542.html
Copyright © 2020-2023  润新知