地址
点击打开链接
就是循环去除能被2整出的,能被3整除的,能被2整除的,知道只剩下3个数以内位置:
代码:
#include<iostream>
#include<cstdio>
#include<string.h>
#include<stack>
#include<queue>
using namespace std ;
#define MAX 105
struct Node{
int num ;
int ranks;
};
queue<Node> qe ;
int main(){
int Num,nums,i,j ;
scanf("%d",&Num);
while(Num--)
{
cin >>nums;
if(nums<=3)
{
cout << 1 ;
for(i=2 ; i <=nums; i ++)
{
cout << " "<<i ;
}
cout <<endl;
continue ;
}
for(i = 1 ; i <=nums; i ++)
{
Node temp;
temp.num=i;
temp.ranks = i ;
qe.push(temp);
}
int index = 1 ,base ;
while(qe.size()>3)
{
int we= 1 ;
if(index%2==1)
base = 2 ;
else
base = 3 ;
index ++ ;
int qe_size = qe.size();
for(i = 1 ; i <= qe_size ;i++)
{
Node tp = qe.front();
qe.pop();
if(tp.ranks%base!=0)
{
tp.ranks = we++;
qe.push(tp);
}
}
}
printf("%d",qe.front().num);
qe.pop();
for(i=0 ; i <=qe.size(); i++)
{
printf(" %d",qe.front().num);
qe.pop();
}
printf("\n");
}
}