·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个)。
解决思路
-
获取输入的数字A
-
生成4个连续数字:A, A+1, A+2, A+3
-
生成所有可能的3位数排列(不能有重复数字)
-
将结果排序
-
按要求格式输出(每行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;
}
代码解释
-
首先读取输入的整数A
-
创建一个数组digits存储A开始的4个连续数字
-
使用三重循环生成所有排列:
· 第一层循环选择百位数
· 第二层循环选择十位数(不能与百位数相同)
· 第三层循环选择个位数(不能与百位或十位数相同)
-
在输出时控制格式,每6个数字一行,用空格分隔,行末无多余空格
-
使用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;
}
代码说明
-
输入处理*:使用 scanf 读取三个整数N、U、D,分别代表井深、每分钟上爬距离和每分钟下滑距离。
-
初始化:
· time 变量记录总时间(分钟)
· height 变量记录蠕虫当前高度
- 主循环:
· 每次循环先让蠕虫向上爬U寸,时间增加1分钟
· 检查是否到达或超过井口(`height >= N`),如果是则跳出循环
· 如果没有到达井口,则下滑D寸,时间再增加1分钟
- 输出结果:使用 printf 输出总时间