11.07学习
一、三中代码解决鸡兔同笼问题
1.直接解方程
#include <stdio.h>
int main() {
int heads, feet, chickens, rabbits;
printf("请输入总头数:");
scanf("%d", &heads);
printf("请输入总脚数:");
scanf("%d", &feet);
// 检查是否有解
if (feet % 2 != 0 || heads * 4 < feet || heads * 2 > feet) {
printf("无解\n");
} else {
rabbits = (feet - heads * 2) / 2; // 兔子数量
chickens = heads - rabbits; // 鸡的数量
printf("鸡的数量:%d\n", chickens);
printf("兔子的数量:%d\n", rabbits);
}
return 0;
}
2.循环穷举法
#include <stdio.h>
int main() {
int heads, feet, chickens, rabbits;
printf("请输入总头数:");
scanf("%d", &heads);
printf("请输入总脚数:");
scanf("%d", &feet);
for (chickens = 0; chickens <= heads; chickens++) {
rabbits = heads - chickens;
if (2 * chickens + 4 * rabbits == feet) {
printf("鸡的数量:%d\n", chickens);
printf("兔子的数量:%d\n", rabbits);
return 0;
}
}
printf("无解\n");
return 0;
}
3.函数封装解方程
#include <stdio.h>
// 函数声明
void solveChickenAndRabbit(int heads, int feet);
int main() {
int heads, feet;
printf("请输入总头数:");
scanf("%d", &heads);
printf("请输入总脚数:");
scanf("%d", &feet);
solveChickenAndRabbit(heads, feet);
return 0;
}
// 函数定义
void solveChickenAndRabbit(int heads, int feet) {
int rabbits, chickens;
// 检查是否有解
if (feet % 2 != 0 || heads * 4 < feet || heads * 2 > feet) {
printf("无解\n");
} else {
rabbits = (feet - heads * 2) / 2; // 兔子数量
chickens = heads - rabbits; // 鸡的数量
printf("鸡的数量:%d\n", chickens);
printf("兔子的数量:%d\n", rabbits);
}
}
二、韩信点兵
#include <stdio.h>
int main() {
int x;
// 假设兵数不超过3000,这是一个合理的上限
for (x = 0; x < 3000; x++) {
if (x % 5 == 1 && x % 6 == 5 && x % 7 == 4 && x % 11 == 10) {
printf("x = %d\n", x);
// 找到答案后可以退出循环
break;
}
}
return 0;
}
这段代码通过穷举法,检查每个数字是否满足题目中给出的条件,即按1到5报数余1,按1到6报数余5,按1到7报数余4,按1到11报数余10。一旦找到符合条件的数字,就打印出来并退出循环
三、无限循环
在C语言中,实现无限循环主要有以下几种方式:
1. while循环: 使用 while(1) 或者 while(条件) ,其中条件总是为真,从而形成无限循环。
while(1) {
// 循环体
}
2. for循环: 使用 for(;;) ,这是一个没有初始化、条件和迭代表达式的循环,因此会无限执行。
for(;;) {
// 循环体
}
3. goto语句: 使用 goto 语句跳转到循环的开始,但通常不推荐使用 goto ,因为它会使代码难以理解和维护。
loop:
// 循环体
goto loop;
4. 递归函数: 通过递归调用自身,可以实现无限循环,但需要注意栈溢出的问题。
void infinite_loop() {
// 循环体
infinite_loop();
}
5. 死循环检测: 在某些情况下,可能需要检测死循环,这可以通过设置一个理论上不可能达到的条件来实现。
while(0) {
// 循环体
}
6. 条件表达式: 使用条件表达式,使得循环条件总是为真。
while(true) {
// 循环体
}
7. 无限循环的退出: 在无限循环中,通常需要某种机制来退出循环,比如检测到特定条件后使用 break 语句。
while(1) {
if (some_condition) {
break;
}
// 循环体
}
8. 信号处理: 在多进程或多线程环境中,可以通过信号处理来退出无限循环。
9. 中断: 在嵌入式编程中,可以通过硬件中断来退出无限循环。
使用无限循环时,需要特别注意程序的健壮性和资源管理,确保程序能够在需要时安全退出循环。