问题描述:
你听说过角谷猜想吗?
任意的正整数,比如 5, 我们从它开始,如下规则计算:
如果是偶数,则除以2,如果是奇数,则乘以3再加1.
如此循环,最终必会得到“1” !
比如 5 的处理过程是:
5
16
8
4
2
1
一个正整数经过多少步才能变成1, 称为角谷步数。
对于5而言,步数也是5
对于1,步数为0
本题的要求是,从标准输入给定一个整数n(1
求满足这个角谷步数的最小的正整数
例如:
输入:
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
int temp = 1;// 满足这个角谷步数的最小的正整数
while (getNum(temp) != num) {
temp++;
}
System.out.println(temp);
}
}