用c语言实现,从1开始5人轮流报数,如果遇到7的倍数或者含有7的数字则跳过. 当报完N个数后(不包括跳过的数)结束游戏。 统计游戏中每个人各跳过了几个数。
时间: 2024-09-30 22:09:52 浏览: 8
在C语言中实现这个功能,我们可以创建一个循环,让五个人依次报数,并检查每个数是否为7的倍数或包含数字7。我们可以使用结构体来存储每个人的信息,包括他们的编号、当前报的数以及跳过的数。以下是一个简单的实现示例:
```c
#include <stdio.h>
#include <stdbool.h>
typedef struct {
int id; // 学生编号
int num; // 当前报出的数字
int skipped; // 跳过的数字计数
} Student;
void check_and_skip(int *num, bool contains_7) {
if (*num % 7 == 0 || stristr((char*)itoa(*num), "7")) {
++(*num);
return;
}
*num += 1;
}
int main() {
const int N = 5; // 总共报数次数
Student students[5] = { {1, 1, 0}, {2, 1, 0}, {3, 1, 0}, {4, 1, 0}, {5, 1, 0} };
int turns = 0;
while (turns < N) {
for (int i = 0; i < 5; ++i) {
check_and_skip(&students[i].num, false); // 初始化时不检查是否含有7
printf("Student %d: %d\n", students[i].id, students[i].num);
// 检查是否需要跳过
if (check_and_skip(&students[i].num, true)) {
students[i].skipped++;
continue;
}
turns++;
if (turns >= N) {
break;
}
}
}
for (int i = 0; i < 5; ++i) {
printf("Student %d skipped %d numbers.\n", students[i].id, students[i].skipped);
}
return 0;
}
```
在这个程序中,我们首先初始化了五个学生,然后在一个大循环中逐个让学生报数。每次报数后,我们会检查数字是否符合条件,如果是,则将该数字计入跳过的次数并继续下一个人。最后,打印每位学生跳过的数字总数。