程序設(shè)計綜合實驗實驗報告模板_第1頁
程序設(shè)計綜合實驗實驗報告模板_第2頁
程序設(shè)計綜合實驗實驗報告模板_第3頁
程序設(shè)計綜合實驗實驗報告模板_第4頁
程序設(shè)計綜合實驗實驗報告模板_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、 程序設(shè)計綜合實驗實驗報告Program Design Experiment Report學(xué)生所在學(xué)院:軟件學(xué)院學(xué)生所在班級:14軟件八班學(xué)生姓名:魏翰林學(xué) 號:140120010227指導(dǎo)教師:李賢善、朱燕、陳賀敏、岳麗文教 務(wù) 處2016年 6 月程序設(shè)計綜合實驗實驗報告實驗一()一、實驗內(nèi)容:城堡問題問題描述 1 2 3 4 5 6 7 # 1 # | # | # | | # #-#-#-#-# 2 # # | # # # # # #-#-#-#-# 3 # | | # # # # # #-#-#-#-# 4 # # | | | | # # # (圖 1) # = Wall | = No

2、 wall - = No wall圖1是一個城堡的地形圖。請你編寫一個程序,計算城堡一共有多少房間,最大的房間有多大。城堡被分割成m´n(m50,n50)個方塊,每個方塊可以有04面墻。輸入數(shù)據(jù)程序從標(biāo)準(zhǔn)輸入設(shè)備讀入數(shù)據(jù)。第一行是兩個整數(shù),分別是南北向、東西向的方塊數(shù)。在接下來的輸入行里,每個方塊用一個數(shù)字(0p50)描述。用一個數(shù)字表示方塊周圍的墻,1表示西墻,2表示北墻,4表示東墻,8表示南墻。每個方塊用代表其周圍墻的數(shù)字之和表示。城堡的內(nèi)墻被計算兩次,方塊(1,1)的南墻同時也是方塊(2,1)的北墻。輸入的數(shù)據(jù)保證城堡至少有兩個房間。輸出要求城堡的房間數(shù)、城堡中最大房間所包括的

3、方塊數(shù)輸入樣例4 7 11 6 11 6 3 10 6 7 9 6 13 5 15 5 1 10 12 7 13 7 5 13 11 10 8 10 12 13 輸出樣例59二、算法描述(或解題思路)1、判斷出方塊哪一面沒有墻,代碼如下:if (houseij%2<1) h(i,j-1);/除2余數(shù)等于1有西墻,小于1無西墻。 if (houseij%4<2) h(i-1,j);/北 if (houseij%8<4) h(i,j+1);/東 if (houseij<8) h(i+1,j); 2、 運用遞歸 記錄數(shù)組,初始化為0,訪問過一個方塊就將其值更改為1.判斷方塊的

4、四面有無墻,哪面無墻,在調(diào)用與他相鄰的方塊,直到被調(diào)用的方塊都有墻的時候。跳出遞歸,該房間記錄以結(jié)束。代碼如下:void h (int mm,int nn) int i=mm,j=nn; if (qij!=0) return; else if (i=0|j=0|i>m|j>n)return ;/j為東西方向 else area+;ff+; qij=ff;/數(shù)組用來記錄是否該方塊被訪問過。bool(0) if (houseij%2<1) h(i,j-1);/xi if (houseij%4<2) h(i-1,j);/北 if (houseij%8<4) h(i,j+

5、1); if (houseij<8) h(i+1,j); 三、程序?qū)崿F(xiàn)#include <iostream>using namespace std;int house5252;bool q5252;int m,n;int area;int ff;void h (int mm,int nn) int i=mm,j=nn; if (qij!=0) return; else if (i=0|j=0|i>m|j>n)return ;/j為東西方向 else area+;ff+; qij=ff; if (houseij%2<1) h(i,j-1);/xi if (ho

6、useij%4<2) h(i-1,j);/北 if (houseij%8<4) h(i,j+1); if (houseij<8) h(i+1,j); int main() cin>>m>>n;int sum=0,k=0;/房間數(shù)以及方塊數(shù) for (int j=1;j<=m;j+) for (int i=1;i<=n;i+) cin>>houseji; for (int c=1;c<=m;c+) for (int f=1;f<=n;f+) if (qcf=0) sum+;h(c,f); if (area>k)

7、k=area; area=0; cout<<sum<<endl<<k<<endl; return 0;四、測試用例和實驗結(jié)果1、沒有想清楚如何遞歸,用循環(huán)模擬逐一枚舉的做法時考慮不周出錯;2、開始判斷墻面的算法沒有想清楚,過于麻煩。實驗二()一、實驗內(nèi)容:木材加工問題描述 木材廠有一些原木,現(xiàn)在想把這些木頭切割成一些長度相同的小段木頭,需要得到的小段的數(shù)目是給定了。當(dāng)然,我們希望得到的小段越長越好,你的任務(wù)是計算能夠得到的小段木頭的最大長度。木頭長度的單位是厘米。原木的長度都是正整數(shù),我們要求切割得到的小段木頭的長度也要求是正整數(shù)。輸入數(shù)據(jù)第一行

8、是兩個正整數(shù)N和K(1 N 10000, 1 K 10000),N是原木的數(shù)目,K是需要得到的小段的數(shù)目。接下來的N行,每行有一個1到10000之間的正整數(shù),表示一根原木的長度。輸出要求輸出能夠切割得到的小段的最大長度。如果連1厘米長的小段都切不出來,輸出"0"。輸入樣例3 7232124456輸出樣例114二、算法描述(或解題思路)1.如果切割的段數(shù)大于木材總長,則輸出0;2.最大可能長度為木材總長除以段數(shù)。從該值開始循環(huán),長度遞減直到符合條件,(每一段除以該長度相加之和等于總需要的段數(shù))為最大值。if (K > S)/k為段數(shù),S為總長cout <<

9、0;else for ( j = S / K; j>0; j-)while (a >=0)D += Aa / j;/a為N-1,N為有幾根木材,A【a】為每根木材的長度。a-;if (D = K)break;cout << j;三、程序?qū)崿F(xiàn)#include <iostream>using namespace std;int N, K;/K為切割的段數(shù);int A10000;int S = 0;int D = 0;int main()cin >> N >> K;int a = N-1;for (int i = 0; i < N;

10、i+)cin >> Ai;S += Ai;int j;if (K > S)cout << 0;else for ( j = S / K; j>0; j-)while (a >=0)D += Aa / j;a-;if (D = K)break;cout << j;四、測試用例和實驗結(jié)果1.由于代碼簡單,沒有用到二分法等算法,直接循環(huán),碰到輸入的數(shù)較大時可能導(dǎo)致,運行時間過長。實驗三()一、實驗內(nèi)容:循環(huán)數(shù)問題描述 若一個n位的數(shù)字串滿足下述條件,則稱其是循環(huán)數(shù)(cyclic):將這個數(shù)字串視為整數(shù)(可能帶有前導(dǎo)0),并用任意一個 1 

11、;到 n 之間(包含1和n)的整數(shù)去乘它時, 會得到一個將原數(shù)字串首尾相接后,再在某處斷開而得到的新數(shù)字串所對應(yīng)的整數(shù)。例如,數(shù)字 142857 是循環(huán)數(shù),因為: 142857 *1 = 142857 142857 *2 = 285714 142857 *3 = 428571 142857 *4 = 571428 142857 *5 = 714285 142857 *6 = 857142。請寫一個程序判斷給定的數(shù)是否是循環(huán)數(shù)。輸入數(shù)據(jù)一行,一個長度在 2 到 60 位之間的數(shù)字串。輸出要求一個整數(shù),若輸入的數(shù)字串是循環(huán)數(shù),輸出1,否則輸出0。輸入樣例142857輸出樣例1二、算法描述

12、(或解題思路)1.先將字符串轉(zhuǎn)換為數(shù)值大小,乘以不同的倍數(shù)存入數(shù)組,并按照從小到大排序;for (int i =0; i<n; i+)ai = si - '0'/asc碼計算每一個字符代表的數(shù)值int sum = 0,temp=1;for (int i =n-1; i>=0; i-)sum += ai * temp;temp *= 10;/計算字符串的數(shù)值;for (int m =1; m <= n; m+)bm - 1 = sum*m;/數(shù)組存字符串?dāng)?shù)值的n倍2. 將字符串所有可能的字符順序按照其數(shù)值大小排列為一個數(shù)組,同樣按照從小到順序排列數(shù)組(不斷將原字

13、符串首字母放到最后獲得新的順序)3.for (int t = 1; t < n; t+)char ch = s0;s= s.substr(1, n - 1);/復(fù)制字符串s += ch;for (int d = 0; d < n; d+)std = sd - '0' int Sum = 0, tmp = 1;for (int x =n-1; x>=0; x-)Sum += stx * tmp;tmp *= 10;c0 = b0;ct = Sum;3.冒泡排序:void sort(int q, int N)for (int i = 0; i < N; i+

14、)for (int j = i; j<N; j+)int temp;if (qi>qj)temp = qi;qi = qj;qj = temp;三、程序?qū)崿F(xiàn)#include <iostream>using namespace std;int N, K;/K為切割的段數(shù);int A10000;int S = 0;int D = 0;int main()cin >> N >> K;int a = N-1;for (int i = 0; i < N; i+)cin >> Ai;S += Ai;int j;if (K > S)co

15、ut << 0;else for ( j = S / K; j>0; j-)while (a >=0)D += Aa / j;a-;if (D = K)break;cout << j;四、測試用例和實驗結(jié)果1.開始沒有注意,字符串乘以的倍數(shù)是有限制的,不能大于字符串的位數(shù)。2.學(xué)會了關(guān)于字符型與數(shù)值的轉(zhuǎn)化,asc碼的具體應(yīng)用。即n=string s-0實驗四()一、實驗內(nèi)容:木材加工問題描述 木材廠有一些原木,現(xiàn)在想把這些木頭切割成一些長度相同的小段木頭,需要得到的小段的數(shù)目是給定了。當(dāng)然,我們希望得到的小段越長越好,你的任務(wù)是計算能夠得到的小段木頭的最大長

16、度。木頭長度的單位是厘米。原木的長度都是正整數(shù),我們要求切割得到的小段木頭的長度也要求是正整數(shù)。輸入數(shù)據(jù)第一行是兩個正整數(shù)N和K(1 N 10000, 1 K 10000),N是原木的數(shù)目,K是需要得到的小段的數(shù)目。接下來的N行,每行有一個1到10000之間的正整數(shù),表示一根原木的長度。輸出要求輸出能夠切割得到的小段的最大長度。如果連1厘米長的小段都切不出來,輸出"0"。輸入樣例3 7232124456輸出樣例114二、算法描述(或解題思路)1.如果切割的段數(shù)大于木材總長,則輸出0;2.最大可能長度為木材總長除以段數(shù)。從該值開始循環(huán),長度遞減直到符合條件,(每一段除以該長度

17、相加之和等于總需要的段數(shù))為最大值。if (K > S)/k為段數(shù),S為總長cout << 0;else for ( j = S / K; j>0; j-)while (a >=0)D += Aa / j;/a為N-1,N為有幾根木材,A【a】為每根木材的長度。a-;if (D = K)break;cout << j;三、程序?qū)崿F(xiàn)#include <iostream>using namespace std;int N, K;/K為切割的段數(shù);int A10000;int S = 0;int D = 0;int main()cin >> N >> K;int a = N-1;for (int i = 0; i < N; i+)cin >&g

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論