角谷猜想的内容为:任意给定一个自然数,若它为偶数则除以2,若它为奇数则乘以3加1,得到一个新的自然数。按照这样的计算方法计算下去,若干此得到的结果必然为1.编写程序对角谷猜想的正确性进行验证。
我们编写的程序,应该是一个函数,然后按照角谷的猜想的方法,我们知道一个自然数,不是偶数就是奇数了,然后和2求余如果为零则为偶数,否则为奇数。因此我们可以按照此过程,编写程序,为了防止死循环,我们定义一个宏,可以让程序在指定的循环次数内进行判断,以防止发生死循环。编写代码如下:
- #include <stdio.h>
-
#define N 1000
-
-
void proveJiaoGu(int n)
-
{
-
int count = 0;
-
while(n != 1 && count <= N){
-
if(n%2 == 0){
-
printf("%d/2 = %d\n",n,n/2);
-
n = n/2;
-
}
-
else{
-
printf("%d*3 + 1 = %d\n",n,n*3+1);
-
n = n*3 + 1;
-
}
-
count++;
-
}
-
-
if(count<N && n == 1)
-
printf("this natural number is according to JiaoGu Gusss.\n");
-
}
-
-
int main(int argc, char * argv[])
-
{
-
int n;
-
printf("please input a number to verify\n");
-
scanf("%d",&n);
-
printf("----------step of verification----------\n");
-
proveJiaoGu(n);
-
-
return 0;
-
}
程序编译执行过程如下:
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.
阅读(6112) | 评论(6) | 转发(0) |