1. 程式人生 > >郭少周和陳澤兩人合作課堂練習和課下作業

郭少周和陳澤兩人合作課堂練習和課下作業

num com 部分 結果 nbsp 復雜 include nio http

1.要求程序必須能處理1000個元素;

2.每個元素是int32類型的,出現子數組之和大於整型表示的最大範圍會出現什麽情況;

3.輸入一個整形數組,數組裏面既有正數也有負數;

4.數組中連續的一個或多個整數組成一個字數組,每個子數組都有一個和;

5.求所有子數組的和的最大值,要求時間復雜度為O(n)。

設計思想:

1.隨即生成數組(含有正數和負數)。

2:求所有子數組,按數組長度進行數組的劃分。
計算:從第一個數開始做加法,若和大於第二個數,則繼續加下一個數(若加上第三個數的和大於第三個數則重復進行此操作;小於第三個數,則舍掉前面的所有數,並繼續重復進行此操作);若小於第二個數,則舍掉第一個數。

出現的問題:

1.在生成隨機數的時候,正負數沒有一起生成。

2.當出現子數組之和大於整型表示的最大範圍會出現溢出情況,運行結果都為零

3.軟件沒有妥當保存導致中途代碼糗事,稍微影響了完成進度。

程序源代碼:


#include<iostream>
#include<time.h>
#include<conio.h>
#define N 1000
using namespace std;
void RandIn(int IntNum,int A[]) //隨機生成數組
{
cout<<"整數內容"<<endl;
for(int i=0;i<IntNum;i++)
{
A[i]=rand()-rand();
cout<<A[i];
if(i%20==4)
cout<<endl;
else
cout<<‘\t‘;
}
}
void SelMax(int IntNum,int A[],int &sum)
{
auto buffer=0;
int count1=0; //求和的數值個數
int count2=0;
for(int j=0;j<=IntNum;j++)
{
if(j==IntNum)
{
j=0;
}
buffer+=A[j];
count1++;
count2++;
if(buffer<0)
{
buffer=0;
count1=0;
}
if(sum<buffer)//sum始終記錄下存在的最大和
{
sum=buffer;
}

{
break;
}
}
}
void main()
{

int IntNum;
int A[N];
int q=0;
while(q==0)
{
auto sum=0;
srand((unsigned)time(NULL));
cout<<"請輸入數組元素的個數:";
cin>>IntNum;
RandIn(IntNum,A);
SelMax(IntNum,A,sum);
cout<<endl;
cout<<sum<<endl;
cout<<"是否繼續測試(輸入0則繼續否則停止)";
cin>>q;
system("cls");
}
} 運行結果: 技術分享圖片

當出現子數組之和大於整型表示的最大範圍時會出現溢出現象,運行結果都為零:

技術分享圖片

心得: 團結就是力量,相比於個人項目,團體協作的優勢十分明顯,但編程能力方面還是太弱這是硬傷,需要借助網絡資源幫助,經過此次編程使得我倆的部分計算機語言運用的更加熟練,理解更加透徹,以後會多加練習努力學好這門課程,學以致用

技術分享圖片

郭少周和陳澤兩人合作課堂練習和課下作業