编写程序count.c。 假设有n个人(0<n<20)围成一圈,按顺序每人分配一个编号(1,2,3,4,…,n),后续活动中每个人分配的此编号始终不变。 现在,从编号为1的人开始、按编号从小到大顺序方向,从1开始报号,即报号规则为1、2、3..,报到m(0<m<20)的人出列,剩下的人仍组成一圈。 然后从下一个人开始,又从1开始报号,报到m的人出列。 依此类推,直到所有人出列。 输出依次出列的人编号序列。 例如:5个人围成一圈,报到3的人出列,即n=5,m=3则依次出列的编号序列为:3、1、5、2、4 格式要求 输入:scanf("%d%d",&n, &m)输出: (1)如果输入不符合要求,则printf("ERROR" (2)每个出列人的编号输出格式为:printf("\t%d",i)
时间: 2023-07-15 12:13:24 浏览: 66
编号为1到20的人围成一圈的出列算法
以下是题目要求的程序count.c的代码实现:
```c
#include <stdio.h>
int main() {
int n, m;
scanf("%d %d", &n, &m);
if (n <= 0 || n >= 20 || m <= 0 || m >= 20) {
printf("ERROR");
return 0;
}
int nums[20];
for (int i = 0; i < n; i++) {
nums[i] = i + 1;
}
int cnt = 0;
while (cnt < n) {
int idx = -1;
for (int i = 0; i < m; i++) {
do {
idx = (idx + 1) % n;
} while (nums[idx] == 0);
}
printf("\t%d", nums[idx]);
nums[idx] = 0;
cnt++;
}
return 0;
}
```
首先读入n和m,如果不符合输入要求则直接输出"ERROR"并结束程序。
然后创建一个长度为n的数组nums,初始化为1~n,表示每个人的编号。
使用一个循环来不断出列,直到所有人都出列。
在每次出列过程中,使用一个变量idx来记录当前报数的人的位置。
循环m次,每次将idx加1,并且需要判断当前位置是否已经出列,如果已经出列则需要跳过。
当循环结束后,idx所指向的人即为需要出列的人,将其输出,并将其编号设置为0表示已经出列。
最后统计出列的人数cnt,当cnt等于n时,所有人都已经出列,程序结束。
阅读全文