PAT乙级题目对应知识点分类梳理
小思路
int a[N];
用来存要检验的数
bool q[N];
标记你正在检验的这个数,在卡拉兹函数的过程中得到的数都是被覆盖数,标记为true
最后遍历数组a[N]
,没有被标记的说明是关键数
code
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e4 + 10;
int n;
int a[N];
bool q[N];
// 声明一个倒序的函数写到sort()里
bool cmp(int a, int b)
{
return a > b;
}
void func(int x)
{
while(x != 1)
{
if (x % 2 == 0) x /= 2;
else x = (3 * x + 1) / 2;
q[x] = true;
}
}
int main()
{
cin >> n;
int num;
for (int i = 0; i < n; i ++ )
{
cin >> num;
a[i] = num;
func(num);
}
sort(a, a + n, cmp);
int cnt = 0;
for (int i = 0; i < n; i ++ )
{
if (!q[a[i]])
{
cnt ++ ;
if(cnt == 1) cout << a[i];
else cout << " " << a[i];
}
}
return 0;
}