首先,作为新手,这是我第一个独立地不看解析地乃至花了一个小时才搞定的入门题

在这个过程中,有遇到这么几个问题

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;
}

posted on 2022-03-02 15:42  Niu的呀  阅读(93)  评论(0)    收藏  举报