版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)絡(luò)游戲運營與推廣策略手冊
- 綠色農(nóng)業(yè)種植標(biāo)準(zhǔn)化的實踐與推廣方案
- 移動互聯(lián)網(wǎng)廣告投放效果評估合同
- 物聯(lián)網(wǎng)智能建筑管理系統(tǒng)合同
- 物流快遞業(yè)智能快遞柜開發(fā)與運營方案
- 智能版權(quán)管理系統(tǒng)設(shè)計與開發(fā)合同
- 智能制造設(shè)備維修與保養(yǎng)服務(wù)合同
- 2024年個人貨物抵押協(xié)議參考格式
- 滁州地區(qū)專用租賃協(xié)議格式2024
- 新能源汽車充電樁安裝與維修合同
- 建筑幕墻工程(鋁板、玻璃、石材)監(jiān)理實施細(xì)則(全面版)
- 小學(xué)數(shù)學(xué)與思政融合課教學(xué)設(shè)計
- 江西省南昌市民德學(xué)校2023-2024學(xué)年八年級上學(xué)期期中數(shù)學(xué)試題
- 2023年度學(xué)校食堂每月食品安全調(diào)度會議紀(jì)要
- 建筑門窗、幕墻安裝工人安全技術(shù)操作規(guī)程
- 綠色高效百萬噸級乙烯成套技術(shù)開發(fā)及工業(yè)應(yīng)用-研究報告
- 項目部單機油耗分析報告
- 企業(yè)和銀行合作情況報告
- 小學(xué)奧數(shù) 等量代換(含答案)
- 《敘事療法案例》課件
- 物聯(lián)網(wǎng)技術(shù)在軍事上的應(yīng)用與現(xiàn)代戰(zhàn)爭教案
評論
0/150
提交評論