如题,代码如下
#include <stdio.h>
int f(int x);
int main()
{
int K;
scanf("%d", &K);
int input[K], i;
for(i = 0; i<K; i++){
scanf("%d", &input[i]);
}
int state[K];//记录各个输入数据的状态,仅当state = 0时输出该数据
for(i=0; i<K; i++){
state[i] = 0;
}
for(i=0; i<K; i++){
if(state[i] == 0){
int x = input[i];
while(x != 1){
x = f(x);
int j;
for(j = 0; j<K; j++){
if(input[j] == x){
state[j]++;//若数据input[i]被其他数据覆盖,则state[i]++
}
}
}
}
}
int output[K], count = 0;
for(i=0; i<K; i++){
if(state[i] == 0){
output[count] = input[i];//输出未被覆盖数据
count++;
}
}
int k, max, t;//下面为数据大小排序及输出
for(k = (count-1); k>=0; k--){
max = output[0];
t = 0;
for(i=1; i<= k; i++){
if(output[i] > max){
max = output[i];
t = i;
}
}
int c = output[k];
output[k] = max;
output[t] = c;
}
for(i=0; i< count; i++){
printf("%d", output[count-1-i]);
if(i<(count-1)){
printf(" ");
}
}
printf("\n");
return 0;
}
int f(int x){
int ret;
if(x%2){
ret = 3*x+1;
}else{
ret = x/2;
}
return ret;
}