标签:
Description
Input
Output
Sample Input
2 20 40
Sample Output
1 7 19 1 19 37题意:n个士兵按1~n的顺序排好,首先从左到右报数,1~2交替,报到2的出队,然后再从左到右1~3交替报数,报到3的出队,循环这两个过程,直到队列的人数<=3为止。最后输出剩下人的最初编号。思路:直接模拟着两个过程,直到人数<=3为止,最后输出结果。代码:#include<cstdio> int a[5001]; //using namespace std; int main() { int N,x,b,c; scanf("%d",&N); while(N--) { scanf("%d",&x); b=x; for(int i=1;i<=x;i++) a[i]=i; while(b>3) { c=0; for(int i=1;i<=x;i++) { if(a[i]==0) continue; else c+=1; if(c==2) { a[i]=0; c=0; } } b=b-b/2; if(b<=3) break; c=0; for(int i=1;i<=x;i++) { if(a[i]==0) continue; else c+=1; if(c==3) { a[i]=0; c=0; } } b=b-b/3; } c=0; for(int i=1;i<=x;i++) { if(a[i]==0) continue; else { c+=1; if(c==b) printf("%d\n",a[i]); else printf("%d ",a[i]); } } } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/a1967919189/article/details/46982119