这道题目其实难度不是很大,就是只要记录你在运行过程中用到的数字,然后把这些数字放在一个数组的ID里,如果数字在就写为1.否则为初始值。
之后从你要寻找的数字里,在list中做一个遍历。看是否存在,如果不存在list中说明就是你要寻找哒。将它放入另外一个数组final中。
final最后要求排序,记得从大到小排。
PPPPPPS:最重要的一点,记录数字的那个数组一定要大一点,否则后面几个测试点会造成段错误。【数组溢出】
#include<stdio.h>
int max(int a[], int len)
{
int i;
int maxid = 0;
for ( i=1; i<len; i++)
{
if ( a[i] > a[maxid]){
maxid = i;
}
}
return maxid;
}
main(){
int i,n,temp1;
int test[105]={0},list[10000]={-1},define[105]={0},final[105]={0};
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&test[i]);
define[i]=test[i];
}
for(i=1;i<=n;i++){
while (test[i]!=1){
if(test[i]%2!=0){
list[(test[i]*3+1)/2]=1;
test[i]=(test[i]*3+1)/2;
}
if(test[i]%2==0){
test[i]=(test[i])/2;
list[test[i]]=1;
}
}
}
temp1=1;
for(i=1;i<=n;i++){
if(list[define[i]]!=1){
final[temp1]=define[i];
temp1++;
}
}
temp1=temp1-1;
for ( i=temp1; i>0 ; i--)
{
int maxid = max(final,i+1);
//swap a[maxid], a[len-1]
int t = final[maxid];
final[maxid] = final[i];
final[i] =t;
}
for(i=temp1;i>1;i--){
printf("%d ",final[i]);
}
printf("%d",final[1]);
return 0;
}