pat 1005 继续(3n+1)猜想

//解题思想:对数列中的每个数进行验证, 如果此数覆盖了其他数,则将其他数置为可覆盖
//依次类推
#include<iostream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;


vector<int> vec;


void Panduan(int n)
{
while (n != 1)
{
if (n % 2 == 0)
{
n /= 2;
vec.push_back(n);
}
else
{
n = (n * 3 +1)/2;
vec.push_back(n);
}
}
}


int main()
{
int n;
cin>>n;
int *temp = new int[n];
bool *flage = new bool[n];
vector<int> truevec;
for (int i = 0; i < n; i++)
{
temp[i] = 0;
flage[i] = false;//0为不能背覆盖,1为能被覆盖
cin >> temp[i];
}
for (int i = 0; i < n; i++)
{
Panduan(temp[i]);
//开始查找被覆盖的数
for (int i = 0; i < vec.size(); i++)
{
for (int j = 0; j < n; j++)
{
if (vec[i] == temp[j])
{
flage[j] = true;//若能找到,则置为能覆盖
}
}
}
}
for (int i = 0; i < n; i++)
{
if (flage[i] == false)
{
truevec.push_back(temp[i]);
//cout<<temp[i]<<" ";
}
}
sort(truevec.begin(), truevec.end());
for (int i = truevec.size()-1; i > 0; i--)
{
cout<<truevec[i]<<" ";
}
cout<<truevec[0]<<endl;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值