問題求解與程式設計

2022-08-11 19:24:17 字數 2029 閱讀 2572

問題提出時,想要利用計算機進行求解,而一般計算機不會分析問題並直接給出解決問題的方案,故我們個人需要分析問題並給出問題的解決方案,再將其描述成計算機能識別的指令(程式),讓計算機進行複雜處理,最終得到問題結果,在這一過程中,計算機確起著非常重要的作用,但是要是沒有前面的一系列步驟,也不能解決問題

程式設計的一般過程如圖所示

由問題到想法的過程,需要分析待處理的資料以及資料之間的關係,抽象出資料型別,形成基本解題思路。對於數值型問題抽象出來的資料模型一般是數學方程,而非數值型別的問題抽象出來的資料模型一般是表、樹、圖等資料結構

由想法到演算法的過程,需要將人的想法描述成演算法(設計演算法),即從計算機的角度去思考其是如何一步一步完成任務的,需要考慮資料在計算機上是如何表示(儲存)和處理的,將資料模型從機外表示轉化為機內表示,描述問題求解的基本思路,將問題的解決想法描述成演算法

由演算法到程式的過程,需要根據程式語言語法,在計算機中對資料進行處理

程式=資料結構+演算法(將問題抽象出乙個適當的資料結構,然後基於資料結構設計乙個好演算法)

以七橋問題為例來說明

哥尼斯堡,城中有一座島,有兩條支流繞其旁,並將整個城市分為北區、東區、南區和島區4個區域,全城共有七座橋將四個城區連線起來,如圖所示,有個人提出乙個問題:乙個步行者怎樣才能不重複、不遺漏地一次走完七座橋,最後回到出發點

00想法:如圖所示,將城區抽象為頂點,用a,b,c,d表示4個城區,將橋抽象為邊,用7條邊表示7座橋,抽象出七橋問題的資料模型如圖4所示,從而將七橋問題抽象為乙個數學問題:球經過圖中每一條邊一次且僅一次的迴路,後來人們稱之為尤拉迴路。尤拉迴路判定規則是,:

(1)如果沒有乙個城區通奇數橋,則無論從**出發都能找到尤拉迴路

(2)如果通奇數橋的城區多於兩個,則不存在尤拉迴路

(3)如果只有兩個城區通奇數橋,則不存在尤拉迴路,但可以從這兩個城區之一出發準哦到尤拉路徑

演算法:將頂點a、b、c、d編號為0,1,2,3,用二維陣列array[4][4]儲存七橋問題的資料模型,如果將頂點i(0<=i<=3),和頂點j(0<=j<=3)之間有k條邊,則元素array[i][j]的值為k,如圖所示,求解七橋問題的關鍵是求與每個頂點的相關聯的邊數,即是在二維陣列array[4][4]中求每一行元素之和,演算法如下:

演算法:eulercircuit

輸入:二維陣列array[4][4]

輸出:通奇數橋的頂點個數count

1.count初始化為0;

2.下標i從0~n-1重複執行下述操作:

2.1  計算第i行元素之和degree

2.2  如果degree為奇數,則count++;

3.返回count  ;

程式:#include

int eulercircuit(int array[4][4],int n) ;//函式宣告,求通奇數橋的頂點個數

int main() ;

int num = eulercircuit(arrary,4);

if(num>=2){

printf("有%d個地方通奇數橋,不存在尤拉迴路\n",num);

else 

printf("存在尤拉迴路\n");

return 0;

int  eulercircuit(int array[4][4],int n){

int i,j,degree,count = 0 ;

for(i = 0 ;i < n  ; i++  ){

degree = 0 ;

for(j = 0 ; j < n ; j++){

degree=degree+array[i][j];

if(degree%2!=0)

count++;

return    count ;

程式設計開發求解吊燈問題

description alice家裡有一盞很大的吊燈。所謂吊燈,就是由很多個燈泡組成。只有乙個燈泡是掛在天花板上的,剩下的燈泡都是掛在其他的燈泡上的。也就是說,整個吊燈實際上類似於一棵樹。其中編號為1的燈泡是掛在天花板上的,剩下的燈泡都是掛在編號小於自己的燈泡上的。現在,alice想要辦一場派對,...

問題求解與程式設計 實驗二 G 大數A B

描述 大家都做個好多a b系列的題目,今天來點新鮮的a b題目。輸入 輸入有多組。每一組資料佔一行。每行有兩個整數,中間用空格隔開。其中整數範圍為 0,10 100 輸出 每組輸出佔一行。具體格式見樣例。樣例輸入11 2 112233445566778899 998877665544332211 樣...

問題求解與程式設計 實驗四 C食堂排隊

描述 某日,食堂視窗推出一款新美食,每個班的同學都想去嚐一嚐。於是,很多人都去這個視窗排隊,但是,隊伍中如果同班同學相鄰站著的話,他們就只需要乙個人排在隊伍中就行了。例如某次隊伍情況 12221133345678899,那麼就會變成一條新的隊伍 1213456789。輸入 輸入有多組資料,對於每組資...