1,该题没说输入的那几个数字是降序还是升序,需要自己排序。
2,一开始代码写的很繁琐,后面看了柳神的代码,修改了fuzhi哪里,结果越改越错。
void fuzhi(int a){
while(a!=1){
if(a%2!=0) a=a*3+1; // if(a%2==0) a=a/2;
a=a/2; // a=(a*3+1)/2; 这里是我犯的错,思维逻辑错误…………
if(A[a]==1) break;
A[a]=1;
}
}
3,思路,我一开始想的思路和柳神一致,就是代码写的不太一样。
建立一个数组A来记录符不符合题意,也没什么好说的啦,按照题意,暴力枚举即可,注意fuzhi里的break可以优化运行时间。关键代码就是fuzhi函数。
4,顺便学习了,sort函数。
5,柳神很厉害,代码写的很漂亮。
#include<iostream>
using namespace std;
#include<algorithm>
#define Max 10000
int A[Max]={0};
bool fy(int a,int b){return a>b;}
void fuzhi(int a){
while(a!=1){
if(a%2!=0) a=a*3+1;
a=a/2;
if(A[a]==1) break;
A[a]=1;
}
}
int main(){
int k;
cin>>k;
int p[k];
for(int i=0;i<k;i++){
cin>>p[i];
fuzhi(p[i]);
}
sort(p,p+k,fy);
int time=0;
for(int i=0;i<k;i++){
if(A[p[i]]==0){
if(time){cout<<" ";}
cout<<p[i];
time =1;
}
}
return 0;
}