當不同可能性的數量很小時,可以使用查找表。
首先,號碼的三位數字的所有可能的組合,例如:
Combinations N Indexes
------------- - ------
000 0 0
001, 010, 100 1 1, 3, 9
002, 020, 200 2 2, 6, 18
011, 101, 110 3 4, 10, 12
012, 021, 102, 120, 201, 210 4 5, 7, 11, 15, 19, 21
022, 202, 220 5 8, 20, 24
111 6 13
112, 121, 211 7 14, 16, 22
122, 212, 221 8 17, 23, 25
222 9 26
第一列顯示相同的組合;第二欄顯示組合的編號(我將它們任意分配);第三欄顯示每個組合的索引,計算結果爲9*<first digit> + 3*<second digit> + <third digit>
。
接下來,建立一個查找表中的每個這十個組合,用這種表達作爲指標:
9*a + 3*b + c
其中a
,b
,並c
是你有三個數字。該表是這樣的:
int lookup[] = {
0, 1, 2, 1, 3, 4, 2, 4, 5, 1
, 3, 4, 3, 6, 7, 4, 7, 8, 2, 4
, 5, 4, 7, 8, 5, 8, 9
};
這是第一個表的改寫,在對應於該值在列N
索引值。例如,在索引1
,3
和9
中找到組合號1
;組合2
在索引2
,6
和18
等等。
爲了獲得組合的號碼,只需檢查
int combNumber = lookup[9*a + 3*b + c];
只是爲了澄清,你有三個變量要存儲0,1或2嗎?用戶可以輸入001/010/100爲1,可以輸入002/020/200爲2? – Steven
我會在正文中予以澄清。 – pfnuesel
'001'和'110'是否一樣? – dasblinkenlight