首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言解字謎:學C + 要學C + 都要學C = 2008,四個漢字各代表什麼數字?

     編輯:關於C

謎題還原

    學 C
  要 學 C
+ 都 要 學 C
-----------
  2 0 0 8

不同漢字代表不同數字(0~9),同一漢字代表同一數字。最高位「都」「要」「學」不能為 0。求四字對應數字。

建模與搜尋空間

  • 都 = a (1~2)、要 = b (1~9)、學 = c (1~9)、C = d (0~9)
  • 四字互不相同
  • 算式:(c*10+d) + (b*100+c*10+d) + (a*1000+b*100+c*10+d) = 2008

四重巢狀迴圈暴力搜尋,僅 9×9×9×10 = 7290 種組合,瞬間完成。

完整程式碼

#include <stdio.h>

int main()
{
    int a, b, c, d, l, m, n, flag = 0;

    for (a = 1; a < 3; a++)           // 都:千位,和為2008故只能1或2
        for (b = 1; b < 10; b++)       // 要
            if (a != b)
                for (c = 1; c < 10; c++)   // 學
                    if (c != a && c != b)
                        for (d = 0; d < 10; d++) // C
                            if (d != c && d != a && d != b) {
                                n = c * 10 + d;          // 學C
                                m = b * 100 + c * 10 + d; // 要學C
                                l = a * 1000 + b * 100 + c * 10 + d; // 都要學C
                                if (n + m + l == 2008) {
                                    printf("都=%d 要=%d 學=%d C=%d\n", a, b, c, d);
                                    flag = 1;
                                }
                            }
    if (!flag) printf("無解!\n");
    return 0;
}

執行結果

都=1 要=9 學=0 C=8

驗證:08 + 908 + 1908 = 2008 ✓

解題技巧總結

  1. 利用進位限制縮小搜尋範圍(千位只能 1 或 2)
  2. 巢狀迴圈配合 continue 條件提前剪枝
  3. 將文字謎題轉化為純數學等式

此類「字謎/數獨」問題是鍛鍊窮舉搜尋與約束滿足思維的經典素材。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved