地址
点击打开链接
就是循环去除能被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"); } }