首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Collatz 猜想 (3n+1) 序列生成:C 語言實現與常見錯誤修正

     編輯:程式設計綜合問答

問題描述

對任意正整數,奇數乘 3 加 1,偶數除 2,循環至 1。輸出從輸入值到 1 的完整序列。

原代碼缺陷

while(1) {
  if(a%2==0) { a/=2; printf("%d\n",a); }
  if(a%2!=0) { a=a*3+1; printf("%d\n",a); }
  if(a==1) break;
}

當 a 為偶數執行完 a/=2 後,若結果為奇數,同一次循環會再進入奇數分支,導致邏輯錯誤。

修正版 (使用 continue 控制流程)

while (1) {
  if (a == 1) break;
  if (a % 2 == 0) {
    a /= 2;
    printf("%d\n", a);
    continue;
  }
  a = a * 3 + 1;
  printf("%d\n", a);
}

關鍵點

  • 每次迭代只執行一條分支,需 continue 或 else if。
  • 輸出包含初始值嗎?題目要求「從這個整數到 1」,故應先輸出輸入值再進循環。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved