首先,作为新手,这是我第一个独立地不看解析地乃至花了一个小时才搞定的入门题
在这个过程中,有遇到这么几个问题
1.while循环出了问题

可以清晰的看到 条件为真才会执行下面大括号内的内容,这个与if -else 语句机制差不多
2.数学公式转变为计算机能懂的语言
例如3n+1,平时数学书写中乘号可以忽略,但计算机她不懂你的心啊
3.如何判断奇数偶数?
这个花了我10分钟,想到3/2=1,int型会把尾数去除,故用了一个m来保存,接着还原着看是否相等
m=n/2;
if(n==2*m) //偶数进入
{
}
else //奇数进入
{
}
###我c,除余符号%竟然可以完美的表达奇偶数之间的区别
4.问题规模想小了
刚开始试了下4,可以正常出结果,但6就有问题,原来一个偶数会在除以2的过程中产生新的奇数,
所以n每次除以2后都要重新判断奇偶,结构的调整让人感觉惊奇
完整代码如下
#include<cstdio>
int main(){
int n,m;
int i=0; //初始化步数值
scanf("%d",&n);
while(n!=1){
m=n/2;
if(n==2*m) //奇数偶数判断
{
n=n/2;
i++;
}
else
{
n=3*n+1;
n=n/2;
i++;
}
}
printf("%d步得到n=1\n",i);
return 0;
}
浙公网安备 33010602011771号