·7-15 計算圓周率
代碼如下:
#include <stdio.h>int main() {double threshold;scanf("%lf", &threshold);double pi_over_2 = 1.0; // π/2的初始值(第一項1)double term = 1.0; // 當前項的值int n = 1; // 當前項的索引while (term >= threshold) {term = term * n / (2 * n + 1); // 遞推計算下一項pi_over_2 += term;n++;}double pi = 2 * pi_over_2; // 計算π的近似值printf("%.6f\n", pi); // 輸出結果,保留6位小數return 0;
}
·7-16 求符合給定條件的整數集
分析題目
題目要求給定一個不超過6的正整數A,考慮從A開始的連續4個數字(即A, A+1, A+2, A+3),然后輸出所有由這4個數字組成的無重復數字的3位數。
例如輸入樣例是2,那么4個數字是2,3,4,5,然后生成所有可能的3位數排列(排列數P(4,3)=4×3×2=24個)。
解決思路
1. 獲取輸入的數字A
2. 生成4個連續數字:A, A+1, A+2, A+3
3. 生成所有可能的3位數排列(不能有重復數字)
4. 將結果排序
5. 按要求格式輸出(每行6個,空格分隔,行末無空格)
代碼如下:
#include <stdio.h>int main()
{int A;scanf("%d", &A);int digits[4];for (int i = 0; i < 4; i++) {digits[i] = A + i;}int count = 0;for (int i = 0; i < 4; i++) {for (int j = 0; j < 4; j++) {if (j == i) continue;for (int k = 0; k < 4; k++) {if (k == i || k == j) continue;int num = digits[i] * 100 + digits[j] * 10 + digits[k];if (count % 6 == 0) {if (count != 0) printf("\n");printf("%d", num);//每行的首個元素} else {printf(" %d", num);//每行剩下的五個元素,注意前面有空格}count++;}}}return 0;
}
代碼解釋
1. 首先讀取輸入的整數A
2. 創建一個數組digits存儲A開始的4個連續數字
3. 使用三重循環生成所有排列:
? ?·?第一層循環選擇百位數
? ?·?第二層循環選擇十位數(不能與百位數相同)
? ?·?第三層循環選擇個位數(不能與百位或十位數相同)
4. 在輸出時控制格式,每6個數字一行,用空格分隔,行末無多余空格
5. 使用count變量跟蹤已輸出的數字數量來控制換行
·7-17 爬動的蠕蟲
代碼如下:
#include <stdio.h>int main() {int N, U, D;scanf("%d %d %d", &N, &U, &D);int time = 0;int height = 0;while (1) {// 向上爬height += U;time++;if (height >= N) {break;}// 下滑height -= D;time++;}printf("%d\n", time);return 0;
}
代碼說明
1. 輸入處理*:使用 scanf 讀取三個整數N、U、D,分別代表井深、每分鐘上爬距離和每分鐘下滑距離。
2. 初始化:
? ?·? time 變量記錄總時間(分鐘)
? ?·? height 變量記錄蠕蟲當前高度
3. 主循環:
? ?·?每次循環先讓蠕蟲向上爬U寸,時間增加1分鐘
? ?·?檢查是否到達或超過井口(`height >= N`),如果是則跳出循環
? ?·?如果沒有到達井口,則下滑D寸,時間再增加1分鐘
4. 輸出結果:使用 printf 輸出總時間