仍然是Java编程哪些事儿中的练习题。
日本一位中学生发现一个奇妙的定理。请角谷教授证明,而教授无能为力。于是产生了角谷猜想。猜想的内容:任给一个自然数,若为偶数则除以2,若为奇数则乘3加1,得到一个新的自然数后按上面的法则继续演算。若干次后得到的结果必为1。请编写代码验证该猜想。
日本一位中学生发现一个奇妙的定理。请角谷教授证明,而教授无能为力。于是产生了角谷猜想。猜想的内容:任给一个自然数,若为偶数则除以2,若为奇数则乘3加1,得到一个新的自然数后按上面的法则继续演算。若干次后得到的结果必为1。请编写代码验证该猜想。
我毕竟是新人,下面把我的代码贴出来,请大家不要笑话。
public class Jiaogu{
public static void main(String[] args){
int sum = 23456;
while(sum != 1){
if(sum%2 = 0){
sum = sum/2;
}else{
sum = sum*3+1;
}
}
System.out.println("成立");
}
}
你可以在一个死循环中加一个判断是否等于1如果是1就break;
lz已经使用while(sum!=1)了,所以,判断是1就break多此一举
import java.util.Random;
class Test {
public static void main(String[] args) {
Random r=new Random();
int num=r.nextInt(500);
System.out.println("验证"+num);
for(;num!=1;){
if(num%2==0){
System.out.println(num+"/2="+num/2);
num/=2;
}else{
System.out.println(num+"*3+1="+(num*3+1));
num=num*3+1;
}
}
}
}
验证250
250/2=125
125*3+1=376
376/2=188
188/2=94
94/2=47
47*3+1=142
142/2=71
71*3+1=214
214/2=107
107*3+1=322
322/2=161
161*3+1=484
484/2=242
242/2=121
121*3+1=364
364/2=182
182/2=91
91*3+1=274
274/2=137
137*3+1=412
412/2=206
206/2=103
103*3+1=310
310/2=155
155*3+1=466
466/2=233
233*3+1=700
700/2=350
350/2=175
175*3+1=526
526/2=263
263*3+1=790
790/2=395
395*3+1=1186
1186/2=593
593*3+1=1780
1780/2=890
890/2=445
445*3+1=1336
1336/2=668
668/2=334
334/2=167
167*3+1=502
502/2=251
251*3+1=754
754/2=377
377*3+1=1132
1132/2=566
566/2=283
283*3+1=850
850/2=425
425*3+1=1276
1276/2=638
638/2=319
319*3+1=958
958/2=479
479*3+1=1438
1438/2=719
719*3+1=2158
2158/2=1079
1079*3+1=3238
3238/2=1619
1619*3+1=4858
4858/2=2429
2429*3+1=7288
7288/2=3644
3644/2=1822
1822/2=911
911*3+1=2734
2734/2=1367
1367*3+1=4102
4102/2=2051
2051*3+1=6154
6154/2=3077
3077*3+1=9232
9232/2=4616
4616/2=2308
2308/2=1154
1154/2=577
577*3+1=1732
1732/2=866
866/2=433
433*3+1=1300
1300/2=650
650/2=325
325*3+1=976
976/2=488
488/2=244
244/2=122
122/2=61
61*3+1=184
184/2=92
92/2=46
46/2=23
23*3+1=70
70/2=35
35*3+1=106
106/2=53
53*3+1=160
160/2=80
80/2=40
40/2=20
20/2=10
10/2=5
5*3+1=16
16/2=8
8/2=4
4/2=2
2/2=1
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s;
int i;
try {
s = br.readLine();
i = Integer.parseInt(s);
System.out.println(i);
while (i != 1) {
if (i % 2 == 0) {
i = i / 2;
System.out.println("偶"+i);
} else {
i = i * 3 + 1;
System.out.println("奇"+i);
}
}
} catch (Exception e) { }
}
对偶数操作 2n/2= n
对奇数操作 (2n+1)*3+1 = 6n+4 变成了偶数,记做2n
所以,不管如何,最后都是变成偶数,除到最后必然会得到1因为偶数就是2的倍数