PTA(乙组)1001、1005————(3n+1)猜想问题
1001
#include<iostream>
#include<cstdio>
using namespace std;
int main(void){
int step = 0;
int n ;
cin>>n;
while(n != 1){
if(n%2==0){
n=n/2;
}else{
n=(3*n+1)/2;
}
step++;
}
cout<<step<<endl;
}
进阶问题1005
#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<vector>
using namespace std;
int main(void){
vector<int> a;//建立int型vector数组a,用于操作
int p = 0;
int i,j;//for循环用做
int n;//n个数
//cout<<"输入n:";
cin>>n;
while(n--){//输入n个数,并将这n个数放到数组a中
int x;
cin>>x;
a.push_back(x);
}
/*cout<<"共输入的个数:"<<a.size()<<endl;
cout<<"这几个数排序后输出:";
sort(a.rbegin(),a.rend());
for(i = 0; i<a.size();i++){
cout<<a[i]<<" ";
}*/
for(i = 0;i < a.size();i++){//数组a中每个元素都进行一次操作
p = a[i];
while(p != 1 && p != 0){
if(p&1){//p是奇数时
p = (3*p+1)/2;
}else{//p是偶数时
p = p/2;
}
for(j = 0;j<a.size();j++){
if(p == a[j]){//判断a[j]是否被某个数覆盖过
a[j] = 0;
}
}
}
}
sort(a.rbegin(),a.rend());//将数组a进行从大到小的排序
int k = 0;
for(k = 0; k<a.size();k++){
if(a[k] != 0){
cout<< a[k];
if(a[k+1] != 0){//满足数字间用 1 个空格隔开,但一行中最后一个数字后没有空格的要求
cout<<" ";
}
}
}
}