参考代码:本题只要分清楚什么是关键数就很容易,即在迭代中只会出现一次在开始的数。
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String arg[]){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
/*int m = sc.nextInt();
if(m==0) break;
int count=0;
while(true){
if(m==1) {
break;
}
if(m%2==0) m=m/2;
else m=(3*m+1)/2;
count++;
}*/
int count = sc.nextInt();
if(count==0) break;
Integer[] TestNum = new Integer[count];
ArrayList<Integer> x = new ArrayList<Integer>();
for(int i=0;i<count;i++){
TestNum[i] = sc.nextInt();
Integer OnceNum = TestNum[i];
while(true){
if(OnceNum==1) {
break;
}
if(OnceNum%2==0) OnceNum=OnceNum/2;
else OnceNum=(3*OnceNum+1)/2;
x.add(OnceNum);
}
}
for(int i=0;i<x.size();i++){
//System.out.print(x.get(i)+" ");
}
int count1=0;
for(int i=0;i<count;i++){
//System.out.println("---"+TestNum[count-i-1]+" "+x.contains(TestNum[count-i-1]));
if(!x.contains(TestNum[count-i-1])){
if(count1==0) System.out.print(TestNum[count-i-1]);
else System.out.print(" "+TestNum[count-i-1]);
count1++;
}
}
System.out.println();
}
}
}