问题描述:
你听说过角谷猜想吗?
任意的正整数,比如 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); }}