输入格式:
每个测试输入包含 1 个测试用例,第 1 行给出一个正整数 K (<100),第 2 行给出 K 个互不相同的待验证的正整数 n (1<n≤100)的值,数字间用空格隔开。
输出格式:
每个测试用例的输出占一行,按从大到小的顺序输出关键数字。数字间用 1 个空格隔开,但一行中最后一个数字后没有空格。
经验
一开始提交第四个测试点不能通过,后来发现原因为m*3+1后忘了除2
代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
int K,n;
int a[100][2];//存放输入的数n及flag
scanf("%d",&K);
for(int i=0;i<K;i++){
scanf("%d",&n);
a[i][0] = n;
a[i][1] = 1;//将falg存放为1
}
for(int i=0;i<K;i++){
if(a[i][1] == 1){
int m = a[i][0];
while(m != 1){
if(m%2 == 0){
m = m/2;
for(int p = 0;p<K;p++)
if(m == a[p][0])
a[p][1] = 0;
}
else{
m = (m*3+1)/2;
for(int p = 0;p<K;p++)
if(m == a[p][0])
a[p][1] = 0;
}
}
}
}
int b[100],j=0;
for(int i=0;i<K;i++){
if(a[i][1] == 1){
b[j] = a[i][0];
j++;
}
}
for(int i = 0;i<j;i++){
for(int k = 0; k<i;k++){
if(b[i]>b[k]){
b[i] = b[i] + b[k];
b[k] = b[i] - b[k];
b[i] = b[i] - b[k];
}
}
}
for(int i =0;i<j-1;i++){
printf("%d ",b[i]);
}
printf("%d",b[j-1]);
return 0;
}