-
求任意兩個數的最大公約數
- 兩個數的最大公約數有可能是其中較小的數字,在尋找最大公約數時按從大到小的順序進行排序,循環變量i的初值從較小的數字開始,依次遞減,去尋找第一個能同時整除兩個整數的自然數,並將其輸出。
- 注意:雖然判定條件是i>0,但在找到第一個滿足條件的i的值後,即可跳出循環,例如輸入25和15,最大公約數是5,對於後面的4、3、2、1沒有必要繼續執行,但此時判定條件仍然成立,要結束循環只能藉助
break
語句。
#include <stdio.h> int main() { int a, b, t, i; printf("enter 2 numbers:\n"); scanf("%d%d", &a, &b); if (a < b) { //比較大小,a存儲大值,b存儲小值 t = a; a = b; b = t; } for (i = b; i > 0; i--) { //i的初值從較小的數字開始,依次遞減,去尋找第一個能同時整除兩個整數的自然數,並將其輸出 if (a % i == 0 && b % i == 0){ printf("The GDC of %d and %d is %d\n", a, b, i); break; //結束循環 } } return 0; }
-
求任意兩個數的最小公倍數
-
輸入的兩個數字,大數a是小數b的倍數,a即爲所求最小公倍數,若a不能被b整除,則需要尋找一個能同時被兩個整數整除的自然數,在尋找最小公倍數時按從大到小的順序進行排序,循環變量i的初值從較大的數字a開始向後遞增,直到找到第一個能同時被兩個整數整除的數字,並將其輸出。
-
注意:由於i的最大值不能確定而導致終止條件不確定,故有如下解決辦法:
- 將判定條件表示成循環變量滿足的基本條件,如終止條件可以設置爲i > 0;
- 終止條件省略不寫,利用循環體中的語句結束循環,如在找到第一個滿足條件的自然數時利用
break
語句跳出循環。
#include <stdio.h> int main() { int a, b, t, i; printf("enter 2 numbers:\n"); scanf("%d%d", &a, &b); if (a < b) { //比較大小,a存儲大值,b存儲小值 t = a; a = b; b = t; } for (i = a; i > 0; i++) { //i的初值從較大的數字a開始向後遞增,直到找到第一個能同時被兩個整數整除的數字,並將其輸出,此處循環終止條件可不寫for (i = a; ; i++) if (i % a == 0 && i % b == 0) { printf("The LCW of %d and %d is %d\n", a, b, i); break; } } return 0; }
-
-
求兩個數m和n的最大公約數
-
利用格式輸入語句將輸入的兩個數分別賦給 a 和 b,然後判斷 a 和 b 的關係,如果 a 小於 b,則利用中間變量 t 將其互換。再利用輾轉相除法求出最大公約數,進而求出最小公倍數。最後用格式輸出語句將其輸出。
-
輾轉相除法:
- 有兩個整數a和b:
- a%b得餘數c;
- 若c = 0,則b爲兩數得最大公約數;
- 若c ≠ 0,則a = b, b = c,再執行1;
- 最小公倍數 = 兩數的乘積 / 最大公約數
- 有兩個整數a和b:
#include <stdio.h> int main() { int a, b, c, m, t; printf("enter 2 numbers:\n"); scanf("%d%d", &a, &b); if (a < b) { t = a; a = b; b = t; } m = a * b; c = a % b; while (c != 0) { a = b; b = c; c = m % b; } printf("The GDC of %d and %d is %d\n", a, b, b); printf("The LCW of %d and %d is %d\n", a, b, m/b); return 0; }
-
-
猴子吃桃問題
- 猴子第一天摘下若干個桃子,當即吃了一半,還不過癮,又多吃了一個。第二天早上又將第一天剩下的桃子吃掉一半,有多吃了一個。以後每天早上都吃了前一天剩下的一半零一個。到第 10 天早上想再吃時,發現只剩下一個桃子了。編寫程序求猴子第一天摘了多少個桃子。
#include <stdio.h> int main() { int day, x1, x2; day = 9; x2 = 1; while(day > 0) { x1 = (x2 + 1) * 2; x2 = x1; day--; } printf("total is %d\n", x1); return 0; }
-
輸入10個數字,輸出其中最大的一個數字:
#include <stdio.h> int main() { int i, max; int a[10]; printf("enter 10 numbers:\n"); for (i = 0; i < 10; i++) scanf("%d", &a[i]); max = a[0]; for (i = 1; i < 10; i++) { if (max < a[i]) max = a[i]; } printf("max = %d\n", max); return 0; }
c_20200504
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.