PTA | Joseph Ring

有N个人围成一圈(编号为1~N),从第1号开始进行1、2、3报数,凡报3者就退出,下一个人又从1开始报数……直到最后只剩下一个人时为止。请问此人原来的编号是多少?

输入格式:

在一行中给出1个不超过100的正整数N。

输出格式:

在一行中输出最后剩下那个人的编号。

输入样例:

10

输出样例:

4

示例代码:

#include<stdio.h>
#include<stdlib.h>
struct circle{
    int num;
    struct circle *next;
};
int main(){
    int n;
    scanf("%d",&n);
    struct circle * head;
    struct circle * cur;
    struct circle * pre;
    head=(struct circle*)malloc(sizeof(struct circle));
    cur=head;
    for(int i=1;i<=n;i++){
        cur->num=i;
        pre=cur;
        cur->next=(struct circle*)malloc(sizeof(struct circle));
        cur=cur->next;
    }
    pre->next=head;
    cur=head;
    int count=0;
    while(cur->next!=cur){
        count++;
        if(count==3){
            count=0;
            //printf("%d",cur->num);
            pre->next=cur->next;
        }
        pre=cur;
        cur=cur->next;
    }
    printf("%d\n",cur->num);
    return 0;
}

PTA | Joseph Ring
https://acm.nanyan.cc/posts/928.html
作者
nanyan
发布于
2023年10月20日
许可协议