Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2502193
  • 博文数量: 308
  • 博客积分: 5547
  • 博客等级: 大校
  • 技术积分: 3782
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-24 09:47
个人简介

hello world.

文章分类

全部博文(308)

分类: C/C++

2011-04-27 18:45:26

    角谷猜想的内容为:任意给定一个自然数,若它为偶数则除以2,若它为奇数则乘以3加1,得到一个新的自然数。按照这样的计算方法计算下去,若干此得到的结果必然为1.编写程序对角谷猜想的正确性进行验证。
    我们编写的程序,应该是一个函数,然后按照角谷的猜想的方法,我们知道一个自然数,不是偶数就是奇数了,然后和2求余如果为零则为偶数,否则为奇数。因此我们可以按照此过程,编写程序,为了防止死循环,我们定义一个宏,可以让程序在指定的循环次数内进行判断,以防止发生死循环。编写代码如下:
  1. #include <stdio.h>
  2. #define N 1000

  3. void proveJiaoGu(int n)
  4. {
  5.   int count = 0;
  6.   while(n != 1 && count <= N){
  7.     if(n%2 == 0){
  8.       printf("%d/2 = %d\n",n,n/2);
  9.       n = n/2;
  10.     }
  11.     else{
  12.       printf("%d*3 + 1 = %d\n",n,n*3+1);
  13.       n = n*3 + 1;
  14.     }
  15.     count++;
  16.   }

  17.   if(count<N && n == 1)
  18.     printf("this natural number is according to JiaoGu Gusss.\n");
  19. }

  20. int main(int argc, char * argv[])
  21. {
  22.   int n;
  23.   printf("please input a number to verify\n");
  24.   scanf("%d",&n);
  25.   printf("----------step of verification----------\n");
  26.   proveJiaoGu(n);

  27.   return 0;
  28. }
程序编译执行过程如下:
peng@ubuntu:~/src/test/c/suanfa/miaoqu$ gcc 6.4.c
peng@ubuntu:~/src/test/c/suanfa/miaoqu$ ./a.out 
please input a number to verify
20
----------step of verification----------
20/2 = 10
10/2 = 5
5*3 + 1 = 16
16/2 = 8
8/2 = 4
4/2 = 2
2/2 = 1
this natural number is according to JiaoGu Gusss.

阅读(6028) | 评论(6) | 转发(0) |
给主人留下些什么吧!~~

Ayasy2015-07-05 08:44:08

count的作用是什么啊

chengxiaopeng2011-05-11 17:29:37

CoreCodes: 对大数处理,可以在while(n !=  1)设置,当n ==1就退出来。不知道这样行不行呢?.....
我试试看。

CoreCodes2011-05-10 08:30:40

对大数处理,可以在while(n !=  1)设置,当n ==1就退出来。不知道这样行不行呢?

chengxiaopeng2011-05-01 09:45:52

linyunxian: 晕,这就验证了啊?
觉得至少要对这个自然数有一定的适应区间啊。
这还涉及到大数的处理。.....
进行了简单的测试,有好的方法,在修改程序,谢谢您。

linyunxian2011-05-01 01:23:41

晕,这就验证了啊?
觉得至少要对这个自然数有一定的适应区间啊。
这还涉及到大数的处理。