题目来源
没有深入思考,直接暴力做了,当成是练习语言语法的题目了。如果数的范围不是1 到 100 那就得换种方法了做了。
不排序,或者说是桶排序的方式来。
记录每个数的变化过程中出现的数字,然后比一比就行了。最后用桶排序的方法把结果从大到小输出。
(java 学的烂,代码凑合看吧)
import java.util.*;
public class Main{
public static void main(String args[]){
Scanner read = new Scanner(System.in);
int cont = read.nextInt(), i = 0;
int in[] = new int[102];
int res[] = new int[102];
int show[] = new int[10000];
while(i < cont){
int temp = read.nextInt();
in[i++] = temp;
while( temp != 1){
if(temp % 2 == 0){
temp /= 2;
}else{
temp = (temp *3 + 1) / 2;
}
show[temp] = 1;
}
}
int total = 0 ;
for(int j=0; j<cont; ++j){
if(show[in[j]] == 0){
res[in[j]] = 1;
total ++;
}
}
for(int j=100; j>1; --j){
if(res[j] == 1){
System.out.print(j);
if(total > 1){
System.out.print(" ");
}else if(total == 1){
System.out.println();
}
total --;
}
}
}
}