#include <iostream>
#include <vector>
#include <list>
using namespace std;
int main()
{
int k;
cin >> k;
int *n = new int [k];
for(int i = 0; i < k; i++)
{
cin >> n[i];
}
vector <int> cover;//数列里每个数字可以覆盖的数的集合
list <int> key;//存放关键数
for(int i = 0; i < k; i++)//将数列的每个数字覆盖的数全部存到cover里
{
int temp = n[i];
while(temp != 1)
{
if(temp % 2 == 0)
{
temp = temp / 2;
cover.push_back(temp);
}
else if(temp % 2 == 1)
{
temp = (temp * 3 + 1) / 2;
cover.push_back(temp);
}
}
}//缺点:没有处理重复数字
for(int i = 0; i < k; i++)//用数列的每个数和可覆盖数比较
{
int key1 = n[i];
bool flag = 0;
for(unsigned int j = 0; j < cover.size(); j++)
{
if(key1 == cover[j])
{
flag = 1;//有相同的说明可覆盖
break;
}
else flag = 0;//没有相同的,不可覆盖
}
if(flag == 0) key.push_back(key1);
}
key.sort();//调用自带的排序函数排序
for(unsigned int i = 0; i < key.size() - 1; i++)
{
cout << key.back() << " ";
key.pop_back();
}
cout << key.back();
return 0;
}
https://blog.csdn.net/github_36210937/article/details/52671387?utm_source=blogxgwz2