您的位置:首页 > 其它

验证角谷猜想系列程序(修改完毕)

2008-08-20 18:33 253 查看
 是我原来看的简明教程上的课后练习。验证角谷猜想:对任意自然数,若是奇数,就对他乘3再加1;若是偶数,就对他除以2,这样就得到一个新数;对这个新数,再按上述奇数,偶数的计算规则进行计算,一直进行下去,最终得到1.
1.百度知道上的答案http://zhidao.baidu.com/question/51552732.html
这个答案有问题,1.后花括号多了一个 2.循环有问题导致结果无法验证猜想

2.论坛2楼(1楼那个也不错,是JS)http://bbs.beewind.com/thread-42364-1-1.html
可惜还是有问题 1.少1个后引号和1个分号 2.n/2不能这么写,应该是n=n/2
修改如下:
public class jg{
public static void main(String[] args){
int i,n;
search:
    for(i=3;i<=10000;i++){      
    n=i;
    do{
  if(n%2==0) {
  n=n/2;
  }
else n=n*3+1;
  if(n<1){
   System.out.println("i="+i);
    System.out.println("This guess is fail");
    break search;  //退出for循环
    }
  }while(n==1);
    }
    System.out.println("数3到10000之间的数符合角谷猜想");
  }
}

3以及4.某百度空间http://hi.baidu.com/chenjunt3/blog/item/b140c31f423cf30b304e15f8.html
编译都没有问题,可惜第一个基本没有用,不可能验证一个数换一个程序的;第二个采用随机,运行效果很好,可惜太具有随机性,要验证10000一下的整数还是要用上一个程序。(其实我怀疑上一个运行那么快会不会有问题)

5.我自己练习的程序,不过也有问题,我还在改。
public class Jiaogucx{
public static void main(String[] args){
int i=2;
int j=2;
for(i=2;i<100;i++); {          //此处错误,多了for后面的分号..汗
if(i%2==0)
{
i=i/2;
}
else
{
i=i*3+1;
}
if (i==1);{
System.out.println("角谷猜想对于"+j+"成立");
}
j++;
}
}
}
运行结果:角谷猜想对于2成立
要求从2输出到100,改完再发上来。去掉分号后不会停了。其实这段代码是垃圾,不管是否成立都会输出成立的,2个变量都不搭界的。

6.别人提供给我的程序,感觉好专业..汗..这个终于没有问题了,我总算基本看懂了。这种东西我做梦都写不出来的~恩..向这个学习..
class JiaoGuCX {
 int num;
 JiaoGuCX(int num){
  this.num = num;
 }
 public void method(){
  int i = num;
  while(i>1){
   if(i%2==0){
    i =  i/2;
   }else{
    i = i*3+1;
   }
  }  
  System.out.println(num+"对于角谷猜想成立!");  
 } 
}
public class Test{
 public static void main(String[] args){
  JiaoGuCX[] a =new JiaoGuCX[101];
  for(int i=0;i<a.length;i++){
   a[i] = new JiaoGuCX(i);
   a[i].method();
  }
 }
}
最后的程序看起来才像样..昨天我也被人说糟蹋面向对象了,一眼就看出学过一点C..唉~说说是不行滴!要把思路转变过来!咳..继续学习..

(完)

-------------------------------------------------------------

从原博客搬来,原时间2008-08-13 16:53:38
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string class 百度 c
相关文章推荐