C語言演算法全總結

2021-10-30 10:27:54 字數 2615 閱讀 1837

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

printf(「%d」,s);

}例:求n的階乘

main()

判斷素數 (窮舉法)

只能被1或本身整除的數稱為素數基本思想:把m作為被除數,將2—int(m-1)作為除數,如果都除不盡,m就是素數,否則就不是。(可用以下程式段實現)

void main()

將其寫成一函式,若為素數返回1,不是則返回0

int prime( m%)

四、驗證哥德**猜想

(任意乙個大於等於6的偶數都可以分解為兩個素數之和)

基本思想:n為大於等於6的任一偶數,可分解為n1和n2兩個數,分別檢查 n1和n2是否為素數,如都是,則為一組解。如n1不是素數,就不必再檢查n2是否素數。

先從n1=3開始,檢驗n1和n2(n2=n-n1)是否素數。然後使n1+2 再檢驗n1、n2是否素數,… 直到n1=n/2為止。

利用上面的prime函式,驗證哥德**猜想的程式**如下:

#include "math.h"

int prime(int m)

main() }

五、排序問題

1.選擇法排序(公升序)

基本思想:

1)對有n個數的序列(存放在陣列a(n)中),從中選出最小的數,與第1個數交換位置;

2)除第1 個數外,其餘n-1個數中選最小的數,與第2個數交換位置;

3)依次類推,選擇了n-1次後,這個數列已按公升序排列。

程式**如下:

void main()

printf("%d\n",a[i]);

} }2.冒泡法排序(公升序)

基本思想:(將相鄰兩個數比較,小的調到前頭)

1)有n個數(存放在陣列a(n)中),第一趟將每相鄰兩個數比較,小的調到前頭,經n-1次兩兩相鄰比較後,最大的數已「沉底」,放在最後乙個位置,小數上公升「浮起」;

2)第二趟對餘下的n-1個數(最大的數已「沉底」)按上法比較,經n-2次兩兩相鄰比較後得次大的數;

3)依次類推,n個數共進行n-1趟比較,在第j趟中要進行n-j次兩兩比較。

程式段如下

void main()

printf("the sorted numbers:\n");

for(i=0;i<10;i++)

printf("%d\n",a[i]);

}   3.合併法排序(將兩個有序陣列a、b合併成另乙個有序的陣列c,公升序)

基本思想:

1)先在a、b陣列中各取第乙個元素進行比較,將小的元素放入c陣列;

2)取小的元素所在陣列的下乙個元素與另一陣列中上次比較後較大的元素比較,重複上述比較過程,直到某個陣列被先排完;

3)將另乙個陣列剩餘元素抄入c陣列,合併排序完成。

程式段如下:

void main()

else

ic++;

} while(ia<=9)

while(ib<=9)

for(i=0;i<20;i++)

printf("%d\n",c[i]);

}六、查詢問題

1.①順序查詢法(在一列數中查詢某數x)

基本思想:一列數放在陣列a[1]---a[n]中,待查詢的數放在x 中,把x與a陣列中的元素從頭到尾一一進行比較查詢。用變數p表示a陣列元素下標,p初值為1,使x與a[p]比較,如果x不等於a[p],則使 p=p+1,不斷重複這個過程;一旦x等於a[p]則退出迴圈;另外,如果p大於陣列長度,迴圈也應該停止。

(這個過程可由下語句實現)

void main()

思考:將上面程式改寫一查詢函式find,若找到則返回下標值,找不到返回-1

②基本思想:一列數放在陣列a[1]---a[n]中,待查詢的關鍵值為key,把key與a陣列中的元素從頭到尾一一進行比較查詢,若相同,查詢成功,若找不到,則查詢失敗。(查詢子過程如下。

index:存放找到元素的下標。)

void main()

if(index==-1)

printf("the number is not found!\n");

else

printf("the number is found the no%d!\n",index);

} 2.折半查詢法(只能對有序數列進行查詢)

基本思想:設n個有序數(從小到大)存放在陣列a[1]----a[n]中,要查詢的數為x。用變數bot、top、mid 分別表示查詢資料範圍的底部(陣列下界)、頂部(陣列的上界)和中間,mid=(top+bot)/2,折半查詢的演算法如下:

(1)x=a(mid),則已找到退出迴圈,否則進行下面的判斷;

(2)x(3)x>a(mid),x必定落在mid+1和top的範圍之內,即bot=mid+1;

(4)在確定了新的查詢範圍後,重複進行以上比較,直到找到或者bot<=top。

將上面的演算法寫成如下程式:

void main()

{ int a[10],mid,bot,top,x,i,find;

printf("please input the array:\n");

for(i=0;i<10;i++)

scanf("%d",&a[i]);

printf("please input the number you want find:\n");

c語言競賽和演算法總結

演算法集適合演算法競賽或興趣了解 2015 2 9 計算機徐一粟 1.10進製轉2進製4 2.啤酒和飲料5 3.圓的面積5 4.切麵條6 5.01字串7 6.字母圖形8 7.求n 個數的最大值,最小值,和9 8.楊輝三角形10 9.2個數 公約數,公倍數 三種演算法1110.歌手大獎賽16 11.輸...

C語言經典演算法詳解

分而治之方法與軟體設計的模組化方法非常相似。為了解決乙個大的問題,可以 1 把它分成兩個或多個更小的問題 2 分別解決每個小問題 3 把各小問題的解答組合起來,即可得到原問題的解答。小問題通常與原問題相似,可以遞迴地使用分而治之策略來解決。下列通過例項加以說明。例 利用分而治之演算法求乙個整數陣列中...

C語言常用演算法大全

1 非數值計算常用經典演算法 1 窮舉 也稱為 列舉法 即將可能出現的每一種情況一一測試,判斷是否滿足條件,一般採用迴圈來實現。例1 用窮舉法輸出所有的水仙花數 即這樣的三位正整數 其每位數字上的數字的立方和與該數相等,比如 13 53 33 153 法一 main 解析 此方法是將100到999所...