题目描述
给出一个正整数 n n n,然后对这个数字一直进行下面的操作:如果这个数字是奇数,那么将其乘 3 3 3 再加 1 1 1,否则除以 2 2 2。经过若干次循环后,最终都会回到 1 1 1。经过验证很大的数字( 7 × 1 0 11 7\times10^{11} 7×1011)都可以按照这样的方式比变成 1 1 1,所以被称为“冰雹猜想”。例如当 n n n 是 20 20 20,变化的过程是 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 20\to 10\to 5\to 16\to 8\to 4\to 2\to 1 20→10→5→16→8→4→2→1。
根据给定的数字,验证这个猜想,并从最后的 1 1 1 开始,倒序输出整个变化序列。
输入格式
输入一个正整数 n n n。
输出格式
输出若干个由空格隔开的正整数,表示从最后的 1 1 1 开始倒序的变化数列。
样例 #1
样例输入 #1
20
样例输出 #1
1 2 4 8 16 5 10 20
提示
数据保证, 1 ≤ n ≤ 100 1 \le n\le 100 1≤n≤100。
链接
我的
思路:
- 创建一个大小为100的数组 利用循环和选择语句对数据进行处理 再用下标将元素输出
- 因为最后一定会变成一,不需要做其他特判,边界值为1,要对1进行特判
- n 虽然小于100 但不代表总共数据一定小于100 数组开大一点
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] nums = new int[200];
//第一个元素特判
nums[0] = n;int flag = 199;
if(n == 1) System.out.print(1);
else {
for(int i = 1;i<100;i++){
if(n%2==0){
n/=2;
}else{
n=n*3+1;
}
nums[i]=n;
if(n==1){
flag = i;
break;
}
}
for(int i = flag;i>=0;i--){
System.out.print(nums[i]+" ");
}
}
}
}