C語言 杭電ACM 1276 士兵佇列訓練問題
阿新 • • 發佈:2019-01-22
#include<stdio.h>
#include<string.h>
int main()
{
int n,a,i,j,str1[5050],str2[5050],b;
scanf("%d",&n);
while(n--){
b=0;
memset(str1,0,sizeof(str1));
memset(str2,0,sizeof(str2));
scanf("%d",&a);
for(i=1;i<=a;i++)
{
str1[i]=i;
}
while(a>=4){
for(i=0,j=0;i<a;i++){
if((i+1)%2!=0){
str2[j+1]=str1[i+1];
j++;
}
}
b=j;
memset(str1,0,sizeof(str1));
if(b<=3){
break;}
for(i=0,j=0;j<b;j++)
{
if((j+1)%3!=0){
str1[i+1]=str2[j+1];
i++;
}
}
a=i;
memset(str2,0,sizeof(str2));
}
if(a<=3){
for(i=0;i<a-1;i++)
printf("%d ",str1[i+1]);
printf("%d\n",str1[a]);}
else if(b<=3){
for(i=0;i<b-1;i++)
printf("%d ",str2[i+1]);
printf("%d\n",str2[b]);}
}
return 0;
}
#include<string.h>
int main()
{
int n,a,i,j,str1[5050],str2[5050],b;
scanf("%d",&n);
while(n--){
b=0;
memset(str1,0,sizeof(str1));
memset(str2,0,sizeof(str2));
scanf("%d",&a);
for(i=1;i<=a;i++)
{
str1[i]=i;
}
while(a>=4){
for(i=0,j=0;i<a;i++){
if((i+1)%2!=0){
str2[j+1]=str1[i+1];
j++;
}
}
b=j;
memset(str1,0,sizeof(str1));
if(b<=3){
break;}
for(i=0,j=0;j<b;j++)
{
if((j+1)%3!=0){
str1[i+1]=str2[j+1];
i++;
}
}
a=i;
memset(str2,0,sizeof(str2));
}
if(a<=3){
for(i=0;i<a-1;i++)
printf("%d ",str1[i+1]);
printf("%d\n",str1[a]);}
else if(b<=3){
for(i=0;i<b-1;i++)
printf("%d ",str2[i+1]);
printf("%d\n",str2[b]);}
}
return 0;
}