原题网址:https://pintia.cn/problem-sets/994805260223102976/problems/994805320306507776
题解:
1 #include<iostream> 2 #include<vector> 3 #include<set> 4 #include<algorithm> 5 using namespace std; 6 7 bool cmp(int a,int b){ 8 return a>b; 9 } 10 11 int main(){ 12 int n; 13 cin>>n; 14 int *p = new int[n]; 15 for(int i=0;i<n;i++) 16 cin>>p[i]; 17 set<int>s; 18 for(int i=0;i<n;i++){ 19 int temp=p[i]; 20 while(1){ 21 if(temp%2!=0) temp=3*temp+1; 22 temp/=2; 23 s.insert(temp); 24 if(temp==1) break; 25 } 26 } 27 set<int>::iterator it; 28 vector<int>ans;//用于存放结果的向量 29 for(int i=0;i<n;i++){ 30 int count=0; 31 for(it=s.begin();it!=s.end();++it){ 32 if(p[i]!=*it) count++; 33 if(count==s.size()) ans.push_back(p[i]); 34 } 35 } 36 sort(ans.begin(),ans.end(),cmp);//为了从大到小输出 37 for(int i=0;i<ans.size();i++){ 38 if(i==ans.size()-1) cout<<ans[i]; 39 else cout<<ans[i]<<" "; 40 } 41 return 0; 42 }