演算法設計與分析習題及解析(一)

2021-09-22 17:40:07 字數 4091 閱讀 6042

迴圈與遞迴的應用

求2+22+222+2222+......+222222(n個2)精確計算

(1.迴圈演算法)

#include

#include

int main()

printf("%d",sum);

return 0;

}執行結果:

(2.遞迴演算法)

#include

int sum(int n)

else sum(n)=2;

}int main()

執行結果:

編寫乙個演算法,其功能是給一維陣列輸入任意6個整數,假設為5,7,4,8,9,1,然後建立乙個具有如圖所示的方陣,並列印出來。

5  7  4  8  9  1

1  5  7  4  8  9

9  1  5  7  4  8

8  9  1  5  7  4

4  8  9  1  5  7

7  4  8  9  1  5

#include

int main()

k=m;k--;m=k;

printf("\n");

}return 0;

}趣味矩陣一

程式設計列印如下的n*n方陣(兩種方法)

1   2   3   4   5   6   7 

24  25  26  27  28  29  8

23  40  41  42  43  30  9

22  39  48  49  44  31  10

21  38  47  46  45  32  11

20  37  36  35  34  33  12

19  18  17  16  15  14  13

(方法一)

#include

int main()

if(n%2==1)

for(i=1;i<=n;i++)

return 0;

}方法2:

#include

int main()

k=k-1;

t=-t;

}for(i=1;i<=n;i=i+1)

return 0;

}程式設計列印如下所示的n*n方陣的上三角陣

1  3  6  10  15

2  5  9  14

4  8  13

7  12

11#include

int main()

for(i=1;i<=n;i++)

return 0; 

}趣味矩陣二

編寫程式列印形如圖所示的n*n方陣

1  1  1  1  1               1  1  1  1  1

2  2  2  2  1               1  2  2  2  2

2  3  3  2  1               1  2  3  2  1

2  3  3  2  1               1  2  3  2  1

2  2  2  2  1               1  2  2  2  2

1  1  1  1  1  1               1  1  1  1  1

#include

int main()

for(i=1;i<=n;i++)

return 0;

}優化演算法的基本技巧一

p115-12

有52張牌,使他們全部正面朝上,第一輪是從第2張開始,凡是2的倍數字置上的牌翻成正面嘲下;第二輪從第3張開始,凡是3的倍數字置上的牌正面朝上的翻成正面朝下,正面朝下的翻成正面朝上;第三輪從第4張牌開始,凡是4的倍數字置上的牌按上面相同規則翻轉,以此類推,直到翻得牌超過104張為止。統計最後有幾張牌正面朝上,以及他們的位置號。

#include

int main()

if(j>104)break;

}if(j>104)break;}}

j=0;

for(i=1;i<53;i++)

}printf("有%d張牌正面朝上",j);

}p115-(13)

a,b,c,d,e5人為某次競賽的前五名,他們在名次公布前猜名次。

a說:b得第三名,c得第五名。

b說:d得第二名,e得第四名。

c說:b得第一名,e得第四名。

d說:c得第一名,b得第二名。

e說:d得第二名,a得第三名。

結果每個人都猜對了一半,實際名次是什麼呢?

#include

int main()

}return 0; 

}p116-(15)

兩個桌球隊進行比賽,各出3人.甲隊為a,b,c三人,乙隊為x,y,z,三人,已抽籤決定比賽名單。有人向隊員打聽比賽的名單,a說他不和x比,c說他不和x、z比,請編寫演算法找出3對賽手的名單?

#include

int main()

return 0; 

}優化演算法基本技巧二

p115-(9)有乙隻經過訓練的蜂蜜只能爬向右側相鄰的蜂房,不能反向爬行。如圖,試求出蜜蜂從蜂房a爬到蜂房b的可能路線。(0

#include

int main()

;scanf("%d %d",&a,&b);

for(i=2;i<100;i++)

r[i]=r[i-1]+r[i-2];

printf("路線數字%d",r[b-a]);

return 0;

}p116-(14)編寫演算法求滿足以下條件的3位整數n:它是完全平方數,其中又有兩位數字相同,如144,676等。

#include

int main()

return 0;

}p116-(17)完成給「餘」猜數的遊戲:

心裡先想好乙個1~100之間的整數x,將它分別除以3,4和7並得到三個餘數,把這三個餘數輸入計算機,計算機能馬上猜出這個數。

please think of a number between 1 and 100

your number divided by 3 has a remainder of 1

your number divided by 4 has a remainder of 0

your number divided by 7 has a remainder of 5

let me think a moment...

your number was 40

分析:由演算法書中根據數學建模道理推出,d=28a+21b+36c;

其中,a的係數28是4和7的公倍數且被3整除餘1

b的係數21是3和7的公倍數,且被4整出餘1

c的係數36是3和4的公倍數,且被7整除餘1

**如下:

#include

int main()

迭代蠻力法的應用:

p185--(2)猴子吃桃子問題,猴子第一天摘下若干個桃子,當即吃了一半,還不過癮,又多吃了2個,第二天早上又將剩下的桃子吃了一半,又多吃了兩個,以後每天早上都吃了前一天剩下的一半零兩個,到第10天早上想在吃時,就只剩下兩個了。問第一天猴子摘下來多少個桃子?

#include

int main()

p126--(例題5)

一輛吉普車穿越1000千公尺的沙漠吉普車的**油量為500加倫,耗油率為1加倫/km。由於沙漠中沒有油庫,必須先用這輛車在沙漠中建立臨時油庫。若吉普車用最少的耗油量穿越沙漠,應在那些地方建立油庫,以及各處儲存的油量。

#include

int main()

while(dis<1000);

oil=500*(k-1)+(1000-dis)*(2*k-1);

printf("storepoint%ddistance%doilquantity%d",k,0,oil);

return 0;

}p186--(7)

有一堆棋子,兩枚兩枚的數,最後余一枚;3枚3枚的數,最後餘2枚;5枚5枚的數,最後餘4枚;6枚6枚的數,最後餘5枚;只有7枚7枚的數,最後正好數完,程式設計求出這堆棋子最少有多少枚棋子。

#include

int main()

printf("%d",j);

return 0;

}

演算法設計與分析習題

證明 令 f n o f 則存在自然數n1,c1,使得對任意的自然數n n1,有 f n c1f n 同理令 g n o g 則存在自然數n2,c2,使得對任意的自然數n n2,有 g n c2g n 令c3 max,n3 max,則對所有的n n3,有 f n c1f n c3f n g n c2...

演算法設計與分析課後習題3 2

題目 編寫乙個演算法,其功能是給一維陣列a輸入任意6個整數,假設為 5 7 4 8 9 1 然後建立乙個具有以下內容的方陣,並列印出來 螢幕輸出 5 7 4 8 9 1 1 5 7 4 8 9 9 1 5 7 4 8 8 9 1 5 7 4 4 8 9 1 5 7 7 4 8 9 1 5 設計思路 ...

演算法分析與設計 演算法及效率分析基礎(一)

1 演算法 解決問題的一種方法或乙個過程,是乙個由若干運 算或指令組成的有窮序列 2 演算法 問題 求解問題的演算法可以看作是輸入例項與輸出之間的函式 3 演算法的特點 input,output 輸入,輸出 deterministic 確定性 feasible 可行性 finite 有窮性 1 正確...