題目:加里森的任務
一, 需求分析
1, 程式所能實現的功能:功能有三(由功能鍵判定)。
1)根據輸入的(n,x,y),通過程式顯示每輪派出去執行任務的戰士的編號,直至只剩一人的情況,判斷是否編號為1的加里森能否最終留下;
2)根據輸入的n值,找出從(n,1,1)到(n,n,n)滿足條件的三元數對;3)退出程式。
2,輸入以及輸出
1) 輸入輸出限制:n為大於等於2的正整數,x為大於等於1小於等於n的正整數,y為大於等於1的正整數(題幹沒有明確限制,預設小於等於n);
2) 輸入輸出形式:對於功能一,輸入符合要求的n,x,y,輸出每輪派出的戰士編號,yes/no表示加里森能否最後留下;對於功能二,輸入符合要求的n,輸出從(n,1,1)到(n,n,n)滿足條件的三元數對;對於功能三,輸出「程式已停止」。
3,正確的輸入輸出範例一:
正確的輸入輸出範例二:
正確的輸入輸出範例三:
錯誤的輸入輸出範例一:
錯誤的輸入輸出範例二:
二, 概要設計
本程式主要實現了兩個功能。
1) 功能一思路,先判斷輸入的n,x,y是否合理,如合理,則將編號1-n存入乙個迴圈鍊錶,頭指標移到編號x時開始計數,指標向後移動y-1次,輸出當前指標所存節點的編號,即為該輪被淘汰的戰士編號,然後再把該節點刪除,指標後移一位重新計數,重複上述操作,直至只留下乙個節點為止。若最後乙個節點編號為1,則加里森留下;否則未留下。
2) 功能二思路,先判斷輸入的n是否合理,如合理,則構建二重for迴圈(i,j,1<=i<=n, 1<=j<=n)列舉從(n,1,1)到(n,n,n)所有可能的nxy組合並進行判斷,一旦符合則輸出該組合。直至迴圈完畢。
判斷方法有兩種,第一種類似功能一,第二種利用約瑟夫環公式法。
資料結構型別的定義:
typedef struct linklink;
主程式流程:
int main()
if(choice==2)
if(choice==1&&t==1)
judge(n,x,y);
if(choice==2&&t==1)
可呼叫函式 judge,cleanjudge,rejudge
if(choice==0)
printf("程式已停止");
}程式模組之間的呼叫關係:
main函式先呼叫fanwei1函式或fanwei2函式判斷輸入是否合法,功能一接著呼叫judge函式,功能二接著呼叫cleanjudge函式或rejudge函式。(judge函式和cleanjudge函式中都呼叫了creatlinklist函式)
三, 詳細設計
1)//建立迴圈鍊錶的函式
void creatlinklist(link *p,int n)
}2)void judge(int n,int x,int y)//這個是帶輸出淘汰過程的判斷
//尋找起點
int m=1;//當前數到的數,起點開始叫號,此時m為1
while (n>1)//最後一位時必被淘汰,所以不用數
m++;
pre=p;
p=p->next;
}cout
3)int cleanjudge(int n,int x,int y)//這是無輸出的判斷,返回1為是,0為否
int m=1;
while (n>1)//最後一位時必被淘汰,所以不用數
m++;
pre=p;
p=p->next;
}if(p->num==1)
return 1;
else
return 0;
}4)功能與cleanjudge相同,思路不同
int rejudge(int n,int x,int y)
5)int fanwei1(int n,int x,int y)//選項1,判斷n,x,y的範圍
else
}else
}6)int fanwei2(int n)//選項2,判斷n的範圍
}函式呼叫關係圖
四, 除錯分析報告
1, 時空分析
creatlinklist函式 o(n)
judge函式 o(n)
cleanjudge函式 o(n)
rejudge函式 o(1)
main函式 o(n^2)
剛開始拿到題目沒有理解題意,感覺完全沒有條件,後來經過分析討論,發現n,x,y有一定限制,而且自擬程式的功能具有多樣性,程式編寫過程中有些因粗心產生的小問題,但都及時解決了。
五, 使用者使用說明
開啟程式會出現以下介面
使用者根據需要輸入1,2,0即可
當使用者輸入1時,要求輸入符合條件的n,x,y,輸入完按回車即可
當使用者輸入2時,要求輸入符合條件的n,輸完按回車即可
當使用者輸入0時
六, 測試結果
資料結構實驗報告
實驗報告 實驗課程 資料結構 實驗專案實驗 專業 電腦科學與技術 姓名於凡 學號 10703070328 指導教師汪林林 實驗時間 2008 12 7 重慶工學院計算機學院 實驗一線性表 1.實驗要求 掌握資料結構中線性表的基本概念。熟練掌握線性表的基本操作 建立 插入 刪除 查詢 輸出 求長度及合...
資料結構實驗報告
實驗一線性表的基本操作 1 實驗目的2 2 實驗環境2 3 實驗內容,主要 除錯與執行 2 4 總結14 實驗二棧的基本操作 1 實驗目的15 2 實驗環境15 3 實驗內容,主要 除錯與執行 15 4 總結18 實驗三赫夫曼樹 1 實驗目的18 2 實驗環境18 3 實驗內容,主要 除錯與執行 1...
資料結構實驗報告
實驗題目 計算機與通訊工程學院 2014 實驗一線性表的應用 實驗目的 1 掌握線性表的邏輯結構定義 2 掌握線性表的兩種儲存結構 順序和鏈式 3 掌握順序表和煉表的定義及基本操作 實驗內容 通過程式設計完成具有一定實際意義的課題,加深對線性表應用的理解和掌握。參考題目如下所示。學生可在完成以下題目...