当前位置:   article > 正文

牛客网刷题 | BC88 魔法数字变换

牛客网刷题 | BC88 魔法数字变换

目前主要分为三个专栏,后续还会添加:

        专栏如下:                 C语言刷题解析       C语言系列文章       我的成长经历

感谢阅读!

初来乍到,如有错误请指出,感谢!


 描述

有一个数字魔法,给你一个正整数n,如果n为偶数,就将他变为n/2, 如果n为奇数,就将他变为乘3加1

不断重复这样的运算,经过有限步之后,一定可以得到1

牛牛为了验证这个魔法,决定用一个整数来计算几步能变成1

输入描述:

输入一个正整数n,范围在100以内

输出描述:

输出一个整数

示例1


思路 : 

分两种情况,一种是偶数,一种是奇数

但是如果是奇数的话,进行乘3然后加1操作之后

还是偶数。

使用 count 来判断 进入循环多少次 就能得出计算了几步

初始化:首先,我们需要一个变量来存储当前的数字 n,以及一个计数器 count 来记录变换的步数。

循环:使用一个 while 循环,条件是 n 不等于 1。只要 n 还是大于 1 的数,我们就继续进行变换。

判断奇偶:在每次循环中,首先判断 n 是奇数还是偶数。

执行变换:根据 n 的奇偶性,执行相应的变换规则。

更新计数:每次变换后,增加计数器 count 的值。

结束循环:当 n 变为 1 时,循环结束。

输出结果:最后,输出计数器 count 的值,它表示了将 n 变换到 1 所需的步数。


代码 1 :

  1. /*思路 : 分两种情况,一种是偶数,一种是奇数
  2. 但是如果是奇数的话,进行乘3然后加1操作之后
  3. 还是偶数。
  4. 使用 count 来判断 进入循环多少次 就能得出计算了几步
  5. */
  6. # include <stdio.h>
  7. int main ()
  8. {
  9. int n = 0;
  10. int count = 0;
  11. scanf("%d",&n);
  12. while (n!=1) //当n不为1的时候就一直进行循环
  13. //当n为1的时候退出循环
  14. /*一旦 n 变为 1,条件 (n != 1) 不再为真,循环就会结束。*/
  15. {
  16. if (n%2==0) //判断偶数
  17. {
  18. n=n/2;
  19. }
  20. else //判断奇数
  21. {
  22. n = (3*n)+1;
  23. }
  24. count++;// 无论 n 是奇数还是偶数,步数都加 1
  25. }
  26. printf("%d",count);
  27. return 0;
  28. }

 代码 2 :

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int n,i;
  5. scanf("%d",&n);
  6. for(i=0;n-1;i++)
  7. {
  8. if(n%2==0)
  9. n=n/2.0;
  10. else
  11. n=3*n+1;
  12. }
  13. printf("%d",i);
  14. return 0;
  15. }
  16. /*——————————————————以下是注释详解——————————————————————————*/
  17. #include <stdio.h> // 包含标准输入输出库
  18. int main() // 主函数的开始
  19. {
  20. int n, i; // 定义两个整型变量 n 和 i
  21. scanf("%d", &n); // 读取用户输入的正整数,存储在变量 n 中
  22. for (i = 0; n != 1; i++) // 初始化循环变量 i,循环条件是 n 不等于 1,每次循环后 i 加 1
  23. {
  24. if (n % 2 == 0) // 如果 n 是偶数
  25. n = n / 2.0; // 将 n 除以 2.0,这里使用 2.0 而不是 2 是为了进行浮点数除法,防止整数除法导致的截断
  26. else // 如果 n 是奇数
  27. n = 3 * n + 1; // 将 n 乘以 3 加 1
  28. }
  29. printf("%d", i); // 输出循环执行的次数,即变换所需的步数
  30. return 0; // 函数返回 0,表示程序正常结束
  31. }

代码 3 :

  1. #include <stdio.h> // 包含标准输入输出库函数
  2. int main() // 主函数的开始
  3. {
  4. int n = 0; // 定义一个整型变量 n,初始值为 0
  5. int pace = 0; // 定义一个整型变量 pace,用于记录变换的步数,初始值为 0
  6. scanf("%d", &n); // 从标准输入读取一个整数值到变量 n
  7. for (; n != 1;) // 开始一个无限循环,循环条件是 n 不等于 1
  8. {
  9. // 使用三元运算符进行条件判断和变换
  10. // 如果 n 是偶数,则 n = n / 2
  11. // 否则(n 是奇数),则 n = 3 * n + 1
  12. n = (n % 2 == 0) ? (n / 2) : (n * 3 + 1);
  13. pace++; // 无论 n 是奇数还是偶数,步数 pace 都自增
  14. }
  15. printf("%d", pace); // 输出步数 pace,即变换到 1 所需的步数
  16. return 0; // 函数返回 0,表示程序正常结束
  17. }

知识点 :while循环

以下内容来自 : 菜鸟教程 C while 循环 | 菜鸟教程 (runoob.com)

语法

C 语言中 while 循环的语法:

  1. while(condition)
  2. {
  3. statement(s);
  4. }

在这里,statement(s) 可以是一个单独的语句,也可以是几个语句组成的代码块。

condition 可以是任意的表达式,当为任意非零值时都为 true。

当条件为 true 时执行循环。 当条件为 false 时,退出循环,程序流将继续执行紧接着循环的下一条语句。

在这里,while 循环的关键点是循环可能一次都不会执行。当条件为 false 时,会跳过循环主体,直接执行紧接着 while 循环的下一条语句。

实例 

  1. #include <stdio.h>
  2. int main ()
  3. {
  4. /* 局部变量定义 */
  5. int a = 10;
  6. /* while 循环执行 */
  7. while( a < 20 )
  8. {
  9. printf("a 的值: %d\n", a);
  10. a++;
  11. }
  12. return 0;
  13. }

当上面的代码被编译和执行时,它会产生下列结果:

  1. a 的值: 10
  2. a 的值: 11
  3. a 的值: 12
  4. a 的值: 13
  5. a 的值: 14
  6. a 的值: 15
  7. a 的值: 16
  8. a 的值: 17
  9. a 的值: 18
  10. a 的值: 19

  

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/598518
推荐阅读
相关标签
  

闽ICP备14008679号