Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 84 Accepted Submission(s) : 25
Problem Description
某部队进行新兵队列训练,将新兵从一開始按顺序依次编号,并排成一行横队。训练的规则例如以下:从头開始一至二报数。凡报到二的出列,剩下的向小序号方向靠拢,再从头開始进行一至三报数。凡报到三的出列,剩下的向小序号方向靠拢。继续从头開始进行一至二报数。。
。,以后从头開始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。
Input
本题有多个測试数据组。第一行为组数N,接着为N行新兵人数。新兵人数不超过5000。
Output
共同拥有N行,分别相应输入的新兵人数,每行输出剩下的新兵最初的编号。编号之间有一个空格。
Sample Input
2 20 40
Sample Output
1 7 191 19 37#include<stdio.h> int w,a; int x[10000],s[10000]; int main() { int i,j,l,k,c,b,n,m; scanf("%d",&n); while(n--) { scanf("%d",&a); for(i=1;i<=a;i++) x[i]=i; w=1; while(a>3) { k=a; if(w%2!=0) { j=1;//刚開始这个地方出错了错写成j=0; for(i=1;i<=k;i++) { if(i%2!=0) { s[j]=x[i]; x[j]=s[j]; j++; } else a--; } } else{ j=1;//<span style="font-family: 'Courier New', Courier, monospace;">刚開始这个地方出错了错写成j=0;</span> for(i=1;i<=k;i++) { if(i%3!=0) { x[j]=x[i]; j++; } else a--; } } w++; } for(i=1;i<=a;i++) printf("%d ",x[i]); printf("\n"); } return 0; }