验证角谷猜想系列程序(修改完毕)
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
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
相关文章推荐
- android加固系列—2.加固前先要学会破解,调试内存值修改程序走向
- 《Win32Asm与RadAsm开发教程》第三部视频(对话框程序实例),2011-1-28(本系列更新完毕)!
- 点阵字体显示系列补记2:关于24点阵汉字显示程序及其修改版本
- android加固系列—2.加固前先要学会破解,调试内存值修改程序走向
- 微信小程序的动态修改视图层的数据 —— 微信小程序教程系列(3)
- face alignment中opencv读取pts文件并修改系列程序
- Lotuser进阶系列(转)——DXL之通过程序修改Domino的设计
- MTK系列任意修改IMEI软件
- 自己根据“XDOWNPAGE ASP版本”分页程序修改(添加前十页,后十页功能)
- Android【USB名称修改系列】第10项-如何修改设备管理器中设备名后的数字
- 1.16 修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多地打印文本。
- iOS开发系列--IOS程序开发概览
- GOS系列之在自己的程序使用GOS
- 修改QQ的程序
- Android【USB名称修改系列】第15项-如何修改USB设备在控制面板中显示的名称
- AppDomain的两个小技巧(程序运行完毕和未处理异常的处理) 捕获未处理异常
- ecshop修改程序随机替换产品名称或图片为Powered by ECShop
- 修改.NET程序或DLL的几种方法
- 微信小程序开发系列六:微信框架API的调用
- 抓虫系列(一) 从简单程序开始 线程安全