吉大考研复试准备-PTA7-28 猴子选大王

1. 用数组和循环取数组下标的方法处理,0表示还没有出队,1表示已经出队

2. lock变量用来计数,每到三就让当下元素值为0的数组变为1,lock再变成1

3. 当count计数到n-1时候直接break,不能再算了,否则退出循环时候整个数组都变成1

4. goto语句的使用:不能声明在可变长度的数组之前。“就是说goto语句与“标签”之间的code不允许有可变长数组的声明语句。因为goto是无条件跳转语句,需要在编译时确定地址,如果可变长数组夹在其中,则编译器无法确定地址。” 参考文献为:C语言 GOTO 你不知道的事情_jump into scope of identifier with variably modifi-CSDN博客

最后,注意n=1时候这种特殊情况

#include <stdio.h>
#include<stdlib.h>

int main()
{
    int n;
    scanf("%d",&n);
    int a[n];
    for(int i=0;i<n;i++)
        a[i]=0;

    if(n==1)
    {
        printf("1");
        goto q1;
    }
    int count=0,i=0,lock=1;
    while(1)
    {
        if(lock==3&&a[i]==0)
        {
            a[i]=1;
            i=(i+1)%n;
            lock=1;
            count++;

            if(count==n-1)
                break;
        }
        else if(lock<3&&a[i]==0)
        {
            i=(i+1)%n;
            lock++;
        }
        else if(lock<3&&a[i]==1)
        {
            i=(i+1)%n;
        }
        else if(lock==3&&a[i]==1)
            i=(i+1)%n;
    }

    for(int j=0;j<n;j++)
        if(a[j]!=1)
        printf("%d",j+1);

    q1:
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值