1005. 继续(3n+1)猜想 (25)

来源:互联网 发布:淘宝店铺身份认证复核 编辑:程序博客网 时间:2024/06/16 03:14

1005. 继续(3n+1)猜想 (25)

卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。

当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对n=3进行验证的时候,我们需要计算3、5、8、4、2、1,则当我们对n=5、8、4、2进行验证的时候,就可以直接判定卡拉兹猜想的真伪,而不需要重复计算,因为这4个数已经在验证3的时候遇到过了,我们称5、8、4、2是被3“覆盖”的数。我们称一个数列中的某个数n为“关键数”,如果n不能被数列中的其他数字所覆盖。

现在给定一系列待验证的数字,我们只需要验证其中的几个关键数,就可以不必再重复验证余下的数字。你的任务就是找出这些关键数字,并按从大到小的顺序输出它们。

输入格式:每个测试输入包含1个测试用例,第1行给出一个正整数K(<100),第2行给出K个互不相同的待验证的正整数n(1

//温故知新,修改于2016.7.30#include<iostream>#include<vector>#include<functional>#include<algorithm>using namespace std;int main(){    int hashNum[101]={0};    int count;    cin>>count;    vector<int> nums;    while(count--){        int num;        cin>>num;        nums.push_back(num);        hashNum[num]=1;    }    vector<int> result;    for(auto num : nums){        if(hashNum[num]==0)            continue;        while(num!=1)        {            num=(num%2==0)?num/2:(num*3+1)/2;            if(num<=100)                hashNum[num]=0;        }    }    for(auto num : nums)        if(hashNum[num]!=0)            result.push_back(num);    sort(result.begin(),result.end(),greater<int>());    for(int i=0;i<result.size();i++)        if(i!=(result.size()-1))            cout<<result[i]<<" ";        else            cout<<result[i]<<endl;    return 0;}
#include<iostream>#include<algorithm>#include<vector>using namespace std;vector<int> program(int data){    vector<int> datas;    while(data!=1)    {        if(data%2==0)        {            data=data/2;            datas.push_back(data);        }        else        {            data=(3*data+1)/2;            datas.push_back(data);        }    }    return datas;}//这个函数主要是对每个数进行检查,然后返还其测试序列bool ifExist(int data,vector<int> queue){    for(vector<int>::iterator it=queue.begin();it!=queue.end();it++)    {        if (data==*it)            return true;    }    return false;}//这个函数主要是检查某个数是否在队列中int main(){    cout<<"please input the data based on the rules"<<endl;    int num;    cin>>num;    vector<int> datas;    for(int i=0;i<num;i++)    {        int data;        cin>>data;        datas.push_back(data);    }    vector<int> notKey;    for(vector<int>::iterator it=datas.begin();it!=datas.end();it++)    {        vector<int> queue=program(*it);//对测试序列的每个数进行测试,得到其测试序列        for(vector<int>::iterator jt=queue.begin();jt!=queue.end();jt++)        {                if(ifExist(*jt,datas)&&!ifExist(*jt,notKey))                {                    notKey.push_back(*jt);                }           }    }    vector<int> keyNum;    for(vector<int>::iterator jt=datas.begin();jt!=datas.end();jt++)        {        if(!ifExist(*jt,notKey))            keyNum.push_back(*jt);          }    sort(keyNum.begin(),keyNum.end(),greater<int>());    for(vector<int>::iterator it=keyNum.begin();it!=(keyNum.end()-1);it++)    {        cout<<*it<<" ";    }    cout<<*(keyNum.end()-1)<<endl;}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 衣服用84洗黄了怎么办 白色衣服用84漂黄了怎么办 84把衣服泡黄了怎么办 84把衣服洗花了怎么办 衣服用84洗掉色怎么办 被84褪色的衣服怎么办 衣服被84烧红了怎么办 84溅到衣服上边怎么办 84把衣服泡花了怎么办 衣服颜色洗旧了怎么办 蒙版画笔用不了怎么办 眼睛小血管破裂出血怎么办 雅漾喷头坏了怎么办 一夜都是浅睡眠怎么办 注塑机合不了膜怎么办 吸了塑料烧焦味怎么办 热熔的管漏水怎么办 45岁了月经不来怎么办 吃了芒果身上痒怎么办 10个月宝宝上火怎么办 1个月的宝宝上火怎么办 2个月的婴儿上火怎么办 1岁宝宝不吃奶粉怎么办 奶水不够宝宝又不吃奶瓶怎么办 13岁脸上长粉刺怎么办 脸敷面膜过敏了怎么办 婴儿面膜是假的怎么办 一贴面膜就过敏怎么办 一敷面膜就过敏怎么办 敷了面膜后过敏怎么办 脸做面膜过敏了怎么办 二十几年的疤痕怎么办 三星c5听筒坏了怎么办 胖子减肥后皮肤松弛怎么办 小婴儿脸上长癣怎么办 痘痘里面有脓怎么办 牛仔外套买大了怎么办 脸上痘印红红的怎么办 眼罩里的水干了怎么办 面膜水进眼睛里怎么办 面膜用剩的精华怎么办