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 19
1 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;
}