C语言PTA报数问题

题目就是这么个意思,在这里只想分享一下方法,就不按照原题的输入输出格式要求了。

题目要求: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好像跑不了,希望有大神知道的可以指点我一下~~):

希望我的代码对你有用,也很希望能有大佬提点我一下,多多益善呐~ 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值