PAT 乙级1005 C++ 提交后..后两个测试点过不去,是为什么?

图片说明

#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