2386: 【入门】【P5727】冰雹猜想

内存限制:512 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:57 解决:22

题目描述

给出一个正整数 lns="http://www.w3.org/1998/Math/MathML">,然后对这个数字一直进行下面的操作:如果这个数字是奇数,那么将其乘 lns="http://www.w3.org/1998/Math/MathML">3 再加 lns="http://www.w3.org/1998/Math/MathML">1,否则除以 lns="http://www.w3.org/1998/Math/MathML">2。经过若干次循环后,最终都会回到 lns="http://www.w3.org/1998/Math/MathML">1。经过验证很大的数字(lns="http://www.w3.org/1998/Math/MathML">7×1011)都可以按照这样的方式比变成 lns="http://www.w3.org/1998/Math/MathML">1,所以被称为“冰雹猜想”。例如当 lns="http://www.w3.org/1998/Math/MathML"> 是 lns="http://www.w3.org/1998/Math/MathML">20,变化的过程是 lns="http://www.w3.org/1998/Math/MathML">20105168421

根据给定的数字,验证这个猜想,并从最后的 lns="http://www.w3.org/1998/Math/MathML">1 开始,倒序输出整个变化序列。

输入

输入一个正整数 lns="http://www.w3.org/1998/Math/MathML">

输出

输出若干个由空格隔开的正整数,表示从最后的 lns="http://www.w3.org/1998/Math/MathML">1 开始倒序的变化数列。

样例输入 复制

20

样例输出 复制

1 2 4 8 16 5 10 20

提示

数据保证,lns="http://www.w3.org/1998/Math/MathML">1100


#include<bits/stdc++.h>
using namespace std;
#define MAXN 205 //这是宏定义或者使用常量:const int MAXN=205; (注意常量最后有分号,而宏定义没有)
int main(){
    int n,num=0,a[MAXN];
    cin>>n;
    while (n!=1) {
    	a[num]=n;
    	num++;  //此两行可以替代成 a[num++]=n;
		if (n%2==0)
		    n/=2;
		else
		    n=3*n+1; 
	}
	a[num]=1;  //将最后的1加入数组
	for (int i=num;i>=0;i--)  //倒序输出
	    cout<<a[i]<<' '; 
	return 0;
}