1. 程式人生 > >C語言 杭電ACM 1276 士兵佇列訓練問題

C語言 杭電ACM 1276 士兵佇列訓練問題

#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;
}