思路:用循环队列思想解题,设置front队头标记和rear队尾标记长度(rear-front+1),每一次循环找出淘汰的位置j(数组下标),最后输出数组剩下的最后数据a[0]即可。
#include <stdio.h>
int main(){
int n,front=0,rear,i;
scanf("%d",&n);
int a[100];
for(i=0;i<n;i++)
a[i]=i+1;
//赋值
rear=i-1;
int j=0;
for(i=0;i<n;i++){
j=(j+2)%(rear-front+1);
//被淘汰的数组下标j
for(int k=j;k<rear;k++)
a[k]=a[k+1];
rear--;
//覆盖淘汰数据,长度-1
}
printf("%d",a[0]);
return 0;
}