一、輸出3-100以內的完美數,(完美數:因子和(因子不包含自身)=數本身
#include <stdio.h>// 函數聲明
int isPerfectNumber(int num);int main()
{printf("3-100以內的完美數有:\n");for (int i = 3; i <= 100; i++){if (isPerfectNumber(i)) {printf("%d\n", i);}}return 0;
}// 判斷是否為完美數的函數
int isPerfectNumber(int num)
{int sum = 1; // 1是所有正整數的因子for (int i = 2; i * i <= num; i++) {if (num % i == 0) {if (i * i != num) {sum += i + num / i;}else {sum += i;}}}return sum == num && num != 1;
}
以下是對代碼的詳細解釋:
1. 函數聲明: ? ? ? ?
?
int isPerfectNumber(int num);
? ? 這行代碼聲明了一個名為isPerfectNumber的函數,該函數接受一個整數參數并返回一個整數。
2. 主函數: ? ? ? ?
int isPerfectNumber(int num)
{int sum = 1; // 1是所有正整數的因子for (int i = 2; i * i <= num; i++) {if (num % i == 0) {if (i * i != num) {sum += i + num / i;}else {sum += i;}}}return sum == num && num != 1;
}
? ? 這個函數用于判斷一個數是否為完美數。具體步驟如下:
? 初始化sum為1,因為1是所有正整數的因子。
? 使用一個循環從2開始遍歷到sqrt(num),檢查每個數是否是num的因子。
? 如果i是num的因子,并且i*i不等于num,則將i和num/i都加到sum中。如果i*i等于num,則只加一次i。
? 最后,檢查sum是否等于num且num不等于1。如果條件成立,則返回1(表示是完美數),否則返回0(表示不是完美數)。
教師版:
二、百錢買百雞問題,一百元錢去買雞,公雞5元,母雞3元,三只小雞1元,問買一百只雞,有多少種買法。
#include <stdio.h>int main()
{int rooster, hen, chick;int count = 0; // 用于記錄符合條件的組合數for (rooster = 0; rooster <= 20; rooster++) { // 公雞最多只能買20只(5*20=100)for (hen = 0; hen <= 33; hen++) { // 母雞最多只能買33只(3*33=99)chick = 100 - rooster - hen; // 小雞的數量由總數100減去公雞和母雞的數量得到if (chick % 3 == 0 && (5 * rooster + 3 * hen + chick / 3) == 100) { // 檢查是否符合條件printf("Rooster: %d, Hen: %d, Chick: %d\n", rooster, hen, chick);count++;}}}printf("Total combinations: %d\n", count);return 0;
}
代碼解釋:
1. 變量聲明:
? rooster:表示公雞的數量。
? hen:表示母雞的數量。
? chick:表示小雞的數量。
? count:用于記錄符合條件的組合數。
2. 循環結構:
? 外層循環遍歷公雞的數量,從0到20(因為每只公雞5元,所以最多只能買20只)。
? 內層循環遍歷母雞的數量,從0到33(因為每只母雞3元,所以最多只能買33只)。
? 計算小雞的數量為100 - rooster - hen。
3. 條件判斷:
? 檢查小雞的數量是否是3的倍數(因為三只小雞1元)。
? 檢查總價是否等于100元。
4. 輸出結果:
? 如果符合條件,打印當前組合并增加計數器。
? 最后輸出符合條件的組合總數。
運行這段代碼,你將得到所有符合條件的組合以及組合的總數。
教師版: