问题描述:

你听说过角谷猜想吗?
任意的正整数,比如 5, 我们从它开始,如下规则计算:
如果是偶数,则除以2,如果是奇数,则乘以3再加1.
如此循环,最终必会得到“1” !
比如 5 的处理过程是:
5
16
8
4
2
1
一个正整数经过多少步才能变成1, 称为角谷步数。
对于5而言,步数也是5
对于1,步数为0
本题的要求是,从标准输入给定一个整数n(1<n<300)表示角谷步数
求满足这个角谷步数的最小的正整数
例如:
输入:
3
则输出:
8
输入:
4
则输出:
16
输入:
7
则输出:
3

问题解决:

package 编程大题;import java.util.Scanner;public class File15 {    private static Scanner scanner = new Scanner(System.in);    /**     * 计算某个数的角谷步数     *     * @param source     *            待求整数     * @return 计算出的角谷步数     */    public static int getNum(int source) {        int num = 0;// 角谷步数        while (source != 1) {            if (source % 2 == 0) {                // 如果是偶数,则除以2                source = source / 2;            } else {                // 如果是奇数,则乘以3再加1                source = source * 3 + 1;            }            num++;        }        return num;    }    public static void main(String[] args) {        int num = scanner.nextInt();// 输入角谷步数(1
<300) int temp = 1;// 满足这个角谷步数的最小的正整数 while (getNum(temp) != num) { temp++; } System.out.println(temp); }}