#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int n,m,i,j,p;
cin >> n;
int a[n][50],b[n],c[n];
for(i=0;i<n;i++)
{
cin >> a[i][0];
}
for(i=0;i<n;i++)
for(p=1;p>=0;p++){
if(a[i][p-1]==1){
c[i]=p;
break;
}
else if(a[i][p-1]%2==0){
a[i][p]=a[i][p-1]/2;
}
else if(a[i][p-1]%2!=0){
a[i][p]=a[i][p-1]*3+1;
}
}
for(j=0;j<n;j++){
b[j]=a[j][0];
for(i=0;i<n;i++){
for(m=0;m<c[i];m++){
if(a[j][0]==a[i][0])
break;
else if(a[j][0]==a[i][m]){
b[j]=0;}
}
}
}
sort(b,b+(n-1),cmp);
for(i=0;i<n;i++)
{
if(b[i]!=0){
cout << b[i];
if(b[i+1]!=0)
cout <<" ";
else cout <<endl;
}
}
return 0;
}
我自己又改了一下
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n,m,i,j,p;
cin >> n;
int a[n][10000],b[n],c[n];
for(i=0;i<n;i++)
{
cin >> a[i][0];
}
for(i=0;i<n;i++)
for(p=1;p>=0;p++){
if(a[i][p-1]==1){
c[i]=p;
break;
}
else if(a[i][p-1]%2==0){
a[i][p]=a[i][p-1]/2;
}
else if(a[i][p-1]%2!=0){
a[i][p]=a[i][p-1]*3+1;
}
}
for(j=0;j<n;j++){
b[j]=a[j][0];
for(i=0;i<n;i++){
for(m=0;m<c[i];m++){
if(a[j][0]!=a[i][0]){
if(a[j][0]==a[i][m])
b[j]=0;
}
}
}
}
sort(b,b+n,greater<int>());
for(i=0;i<n;i++)
{
if(b[i]!=0){
cout << b[i];
if(b[i+1]!=0)
cout <<" ";
else cout <<endl;
}
}
return 0;
}