十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
你的程序这样改
建网站原本是网站策划师、网络程序员、网页设计师等,应用各种网络程序开发技术和网页设计技术配合操作的协同工作。创新互联专业提供做网站、网站建设,网页设计,网站制作(企业站、自适应网站建设、电商门户网站)等服务,从网站深度策划、搜索引擎友好度优化到用户体验的提升,我们力求做到极致!
#include "stdio.h"
int F(int a)
{
if (a==1) return 1;
if (a%2) return 1+F(3*a+1);
else return 1+F(a/2);
}
void main()
{
int a=0;
scanf("%d",a);
printf("%d",F(a));
}
有的数字递归次数很长导致堆栈溢出
我是这样算的,可以一次算出1~n的循环步数
有到ProjectEuler题目就是这个
#includeiostream
#includemath.h
using namespace std;
#define N 100
int a[N+1]={0};
int f(int n);
void main()
{
int i=1;
a[1]=1;
for(i=1;i=N;i++)
a[i]=f(i);
for(i=1;i=N;i++)
couti" "a[i]endl;
}
int f(int n)
{
if(n=Na[n])
return a[n];
else
{
if(n%2)
return 1+f(n*3+1);
else
return 1+f(n/2);
}
}
代码比较简单,各语句意义见注释。。。
#include stdio.h
int main(int argc, char *argv[])
{
int i; /*定义要处理的变量*/
scanf("%d", i); /*输入变量值*/
while(i != 1)
{
if(i%2)/*奇数*/
{
printf("%d*3+1=%d\n", i, i*3+1); /*按题目要求的格式打印出来*/
i = i*3+1; /*更新变量值*/
}
else /*偶数*/
{
printf("%d/2=%d\n", i, i/2); /*按题目要求的格式打印出来*/
i = i/2; /*更新变量值*/
}
}
printf("END\n"); /*最后打印END*/
return 0;
}
另外几个测试结果图片:
#includestdio.h
main()
{int
a,b,count;
printf("请输入a的值,以便检验角谷猜想。\na=");
scanf("%d",a);
b=a;
while
(a!=1)
{if
(a1a%2==0)
{a=a/2
;printf
("→%d\n",a);}
else
{a=3*a+1;printf("→%d\n",a);}
count++;}printf("%d需经过%d步才得到1.",b,count);}
//如果能够逆推出,比方说,23的下一步是70,那么都有哪些数的下一步是70?如此逆推,就能写成一棵"数论树".
#includestdio.h
int main()
{
int n, t, m = 0;
scanf("%d", n);
t = n;
printf("%d ", t);
while(t != 1)
{
if(t % 2)
t = t * 3 + 1;
else
t /= 2;
m++;
printf("%d ", t);
}
printf("\n%d calculate %d times,the answer become to 1!\n", n, m);
return 0;
}
#includestdio.h
main()
{
int n,c=0;
printf("输入一个小于等于一万的整数:");
scanf("%d",n);
if(n10000n0) printf("输入错误请重新输入!");
while(n!=1)
{
if(n%2==0)
n=n/2;
else
n=n*3+1;
c++;
}
printf("%d\n",c);
}