码迷,mamicode.com
首页 > 编程语言 > 详细

大数溢出数组求最大子数组

时间:2015-03-30 20:54:21      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:

题目:
  返回一个占内存较多的数组的最大子数组。
要求:
  两人结对完成编程任务。
  一人主要负责程序分析,代码编程。
  一人负责代码复审和代码测试计划。
  
思想:
  老师要求主要是解决内存溢出问题,所以我写的只是一种测试,可能和题目不符,但思路应该一样,就是把大数字一分为二,就像计算机中的高八位低八位一样,我假设一个数字最大表示范围为0~100,如果想要表示9856,那么就用98后面的跟上56来表示,然后高位有正负,求最大子数组,将结果放大相应倍数 加上对应的低位数字
程序源代码:
#include<iostream>
#include<ctime>
using namespace std;
  int main()
  {    
      srand((unsigned)time(NULL));  
     int * arr1=new int[5];
     int * arr2=new int[5];   
     int sum=0,k=0,result=0;
     int randoms=0,count1=0,count2=0,c1=0,c2=0;
     cout<<"随机产生10个数值:\n"<<endl;
     for ( int i1=0; i1<5; i1++ ) {
         randoms = ( -rand()%100 + ( rand()%100 ) );
         arr1[i1] = randoms;       
     }
     for ( int i2=0; i2<5; i2++ ) {
         randoms =  ( rand()%100 ) ;
         arr2[i2] = randoms;
         
     }
     for ( int i3=0; i3<5; i3++ ) {
         if((arr2[i3]/10<0)){
         	
         
         cout<<"数组元素"<<i3+1<<"分别为:"<<arr1[i3]<<"0"<<arr2[i3]<<endl;
         }
         else
         cout<<"数组元素"<<i3+1<<"分别为:"<<arr1[i3]<<arr2[i3]<<endl;
     }
     result=arr1[0];
 
     for ( int j=0; j<5; j++ ) {
         if ( sum>=0 ){ c2=j; sum+=arr1[j]; }
         else { c1=j; sum=arr1[j]; }
         if( result< sum ) {
             count1=c1;
             count2=c2;
             result=sum;
         }
     }
     result=result*100;
     for(int i=c1;i<=c2;i++)
     {
     	result+=arr2[i];
     } 
      cout<<endl<<"从第"<<count1+1<<"个元素到第";
     cout<<count2+1<<"个元素为最大数组"<<endl<<endl;
     cout<<"最大数组之和:"<<result<<endl<<endl;            
     return 0;
 }

  运行截图;

技术分享

结对编程总结:

  程序基本实现,有瑕疵,不过为了赶时间,以后补充更好的吧。通过这次编程实践,我觉得交流可以

扩充思路,互相指点,很有帮助。^_^

大数溢出数组求最大子数组

标签:

原文地址:http://www.cnblogs.com/huazongzong/p/4378886.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!