解數字謎題

其中 V, C, T 三個字母各代表一個非 0 且數值不同的十進位數字, I, N, G, Q, R, E 六個字母各代表一個不同的十進位數字, 請找出這些數字合理的組合?

怎樣運用 C 語言來製作這樣子的程式呢?

  1. 直接測試法:

    在上面這個數字謎題中總共使用了九個不同的數字, 我們可以有兩種基本的方法來測試 9! = 362880 種可能的答案

    1. 產生不同排列的程式來列舉所有的排列方式, 然後一個一個地測試看看是否符合。

    2. 對這一個特殊的九個變數問題來說, 我們也可以用九層的迴圈來產生所有可能的排列情況, 然後一個一個地測試看看是否符合。

  2. 加入條件限制:

    其實仔細分析一下這些數字個自的範圍之後, 就會發現根本不須要測試 9! 種數字的組合:

    1. 因為 I + C + C 最大也比 27 要小, 同時 V + 進位 (2 或是 1 或是 0) 最大是 11 而已, 所以 T 必然為 1,

    2. V + 進位 如果要有進位的話, V 必須是 8 或 9, 同時 R 必須為 0 或 1, 既然 T 已經是 1 了, R 只好是 0,

    3. Q + Q + T = Q + Q + 1 == E, 所以 E 一定是奇數

    4. I + I + N + 進位 == N, 進位可以是 0, 1 或是 2, 所以 I + I + 進位 == 10 或是 20, 由此可知 I 一定是 4 或是 5 或是 9

    5. 其它...

程式要求:

  1. 可以使用 time.h 中的 clock() 函式來求得目前程式執行的時間: 算出來時間的單位是秒。

  2. 請儘量用函式來簡化邏輯

  3. 請以 ANSI C 語法及函式庫來製作

範例執行程式

如果你還有時間的話, 不妨試看看如果 I, N, G, Q, R, E, V, C, T 可以相等的話會如何? 或是試看看如果 I, N, G, Q, R, E, V, C, T 是十六進位的數字的話會如何?

程式設計課程 首頁

製作日期: 99/10/19 by 丁培毅 (Pei-yih Ting)
E-mail: pyting@cs.ntou.edu.tw