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