任意给定一个正整数N,
如果是偶数,执行: N / 2
如果是奇数,执行: N * 3 + 1
生成的新的数字再执行同样的动作,循环往复。
通过观察发现,这个数字会一会儿上升到很高,
一会儿又降落下来。
就这样起起落落的,但最终必会落到“1”
这有点像小冰雹粒子在冰雹云中翻滚增长的样子。
比如N=9
9,28,14,7,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1
可以看到,N=9的时候,这个“小冰雹”最高冲到了52这个高度。
输入格式
一个正整数N(N<1000000)
输出格式
一个正整数,表示不大于N的数字,经过冰雹数变换过程中,最高冲到了多少。
例如,输入:
10
程序应该输出:
52
再例如,输入:
100
程序应该输出:
9232
这题就真的搞,就是你初次去看会发现,很简单啊,就是按照他的去模拟输出就可以,但是本题其实是考不大于n的这部分数的最大输出,题面不认真看确实容易产生歧义,但是认真看就行
然后就是我当时傻傻的觉得,数据如果那么会不会过不了
然后试了一下暴力,完美通过,所以本题就是很水,暴力就可
下面是代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
public class Main冰雹数 {
public static void main(String[] args) throws IOException {
StreamTokenizer x = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
x.nextToken();
long m=(int)x.nval;
long max=1;
for(int i=1;i<m;i++) {
long n=i;
while(n!=1) {
if(n%2==0)
n/=2;
else
n=n*3+1;
if(n>max)
max=n;
}
}
out.println(max);
out.flush();
}
}