仍然是Java编程哪些事儿中的练习题。
日本一位中学生发现一个奇妙的定理。请角谷教授证明,而教授无能为力。于是产生了角谷猜想。猜想的内容:任给一个自然数,若为偶数则除以2,若为奇数则乘3加1,得到一个新的自然数后按上面的法则继续演算。若干次后得到的结果必为1。请编写代码验证该猜想。

解决方案 »

  1.   

    楼主,你不会把 CSDN 的人当作代码工了吧?
      

  2.   

    回2楼,我自己能力有限,写出的代码不知道是否正确,想看看论坛里高人们写的。
    我毕竟是新人,下面把我的代码贴出来,请大家不要笑话。
    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("成立");
    }
    }
      

  3.   

    我觉得只能证明其成功,不能证明其失败(或者在一定的范围内它是失败的),不然就一直让它无限循环,直到尽关,何处是尽头。
    你可以在一个死循环中加一个判断是否等于1如果是1就break;
      

  4.   


    lz已经使用while(sum!=1)了,所以,判断是1就break多此一举
      

  5.   

    既然是证明 那假设肯定是成立的 如果能够轻易举出一个自然数成为角谷定理的反例 那该定理早就被推翻了
    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
      

  6.   


    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) { }
    }
      

  7.   

    日本一位中学生发现一个奇妙的定理。请角谷教授证明,而教授无能为力。于是产生了角谷猜想。猜想的内容:任给一个自然数,若为偶数则除以2,若为奇数则乘3加1,得到一个新的自然数后按上面的法则继续演算。若干次后得到的结果必为1。请编写代码验证该猜想。如果一个数是偶数,记做2n,奇数记做2n+1
    对偶数操作 2n/2= n
    对奇数操作 (2n+1)*3+1 = 6n+4 变成了偶数,记做2n
    所以,不管如何,最后都是变成偶数,除到最后必然会得到1因为偶数就是2的倍数