克拉兹问题是一个简单有趣而又没有解决的数学问题。这个问题是由L. Collatz在1937年提出的。
问题如下:
(1)输入一个正整数n;
(2)如果n=1则结束;
(3)如果n是奇数,则n变为3n+1,否则n变为n/2;
(4)转入第(2)步。
举一个例子:n=13的时候,经历10步可以达到1。
13 -> 40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1
请问10000以内,哪个数变为1需要转化的步骤多。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j;
int f;
int max=0;
int num=0;
for (i=1;i<=4;i++)
{j=i;
while(j!=1)
{ if(j%2==1)
j=3*j+1;
else
j=j/2;
num++;
}
if(max<num)
{ max=num;
f=i;}
}
printf("%d %d",f,max);
system("pause");
return 0;
}
问题如下:
(1)输入一个正整数n;
(2)如果n=1则结束;
(3)如果n是奇数,则n变为3n+1,否则n变为n/2;
(4)转入第(2)步。
举一个例子:n=13的时候,经历10步可以达到1。
13 -> 40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1
请问10000以内,哪个数变为1需要转化的步骤多。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j;
int f;
int max=0;
int num=0;
for (i=1;i<=4;i++)
{j=i;
while(j!=1)
{ if(j%2==1)
j=3*j+1;
else
j=j/2;
num++;
}
if(max<num)
{ max=num;
f=i;}
}
printf("%d %d",f,max);
system("pause");
return 0;
}