题目就是这么个意思,在这里只想分享一下方法,就不按照原题的输入输出格式要求了。
题目要求:num个人围成一圈,从第一个人开始报数,报到目标数值k的人退出,输出该人的编号。
输入格式:
两个整数:num k,以空格间断;
输出格式:序号j
解题思路:运用while循环嵌套条件选择,用不同的控制变量分别控制转圈和报数。其中报数环节需要初始化数组后运用flag值,判断该序号的人是否需要报数(将由1和0来判定是否已出局)。
代码如下:
#include <stdio.h>
int main ()
{
int num;
int k;
scanf("%d%d", &num,&k); // 读取num人进行游戏,报数值为k
int i = 0;
int cot[100];
for (i = 1; i <= num;i++)//一共num个人
cot[i] = 1;//初始化标记为1
int t = 0;//报数的
int j = 1;//出局人的序号
int n=num;//用n计算人数
while (n >= 0)//循环由是否全员出局控制
{
if(cot[j]==0)//已出局
{
if(j==num)//如果是最后一个人,就回到开头;
j = 1;
else
j++;//跳过
}//已经出局的也要继续传递下去,只是没报数,当他不在罢!
else if(cot[j]==1)//没出局的要加一个报数操作
{
t++;//报数用的t,别忘了
if(t==k)//如果报到了目标值
{
printf("%d ", j);//就输出这个人的序号
cot[j] = 0;//将该人对应的数组标记值赋为0,下次他就不用报数了
t = 0;//重置报数,下一个人从1开始
n--;//减少一个人,用在while循环判断的
}
if(j==num)//转圈圈,回到第一个人
{
j = 1;
}
else{
j++;//直接下一个人
}
}
}
return 0;
}
运行结果(我用的Mac自带的Xcode,不知道为什么在vs code好像跑不了,希望有大神知道的可以指点我一下~~):
希望我的代码对你有用,也很希望能有大佬提点我一下,多多益善呐~