1005. 继续(3n+1)猜想 (25)
来源:互联网 发布:淘宝店铺身份认证复核 编辑:程序博客网 时间:2024/06/16 05:35
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
- 1005. 继续(3n+1)猜想 (25)
- 1005. 继续(3n+1)猜想 (25)
- 1005. 继续(3n+1)猜想 (25)
- 1005. 继续(3n+1)猜想 (25)
- 1005. 继续(3n+1)猜想 (25)
- 1005. 继续(3n+1)猜想 (25)
- 1005. 继续(3n+1)猜想 (25)
- 1005. 继续(3n+1)猜想 (25)
- 1005. 继续(3n+1)猜想 (25)
- 1005. 继续(3n+1)猜想 (25)
- 1005. 继续(3n+1)猜想 (25)
- 1005. 继续(3n+1)猜想 (25)
- 1005. 继续(3n+1)猜想 (25)
- 1005. 继续(3n+1)猜想 (25)
- 1005. 继续(3n+1)猜想 (25)
- 1005. 继续(3n+1)猜想 (25)
- 1005. 继续(3n+1)猜想 (25)
- 1005. 继续(3n+1)猜想 (25)
- list::swap函数
- Masonry - Autolayout 第三方自动布局类 归纳
- Sublime使用常见技巧举例
- Masonry介绍与使用实践:快速上手Autolayout
- Codeforces 407 A. Triangle 【Codeforces Round #239 (Div. 1)】
- 1005. 继续(3n+1)猜想 (25)
- 多屏尺的自动适配 AutoLayout (手动添加约束)
- lwip网络接口netif
- Python 读取键盘输入 :raw_input()和input() 函数 读取交互输入
- Android——自定义ArrayAdapter
- 提高Interface Builder高效工作的8个技巧
- error: two or more data types in declaration specifiers原因及解决方法
- Activity生命周期应用实例
- IOS框架研究之SDWebImage的原理以及使用流程