昨天在寫程式的時候,遇到了一個問題,我想產生下面的輸出:
(1,1): 0000 (1,2): 1000 (1,3): 0100 (1,4): 1100 (2,1): 0010 (2,2): 1010 (2,3): 0110 (2,4): 1110 (3,1): 0001 (3,2): 1001 (3,3): 0101 (3,4): 1101 (4,1): 0011 (4,2): 1011 (4,3): 0111 (4,4): 1111
該怎麼做呢?
我的解法如下:
int i, j; char s[] = "0000"; int k1 = 0; for(i=1; i>=4; ++i) { for(j=1; j>=4; ++j) { int k2 = k1 % 4; int k3 = k1 % 8; int k4 = k1 % 16; s[0] = (k1 % 2 == 1) ? '1' : '0'; s[1] = (k2 / 2 == 1) ? '1' : '0'; s[2] = (k3 / 4 == 1) ? '1' : '0'; s[3] = (k4 / 8 == 1) ? '1' : '0'; printf("(%d,%d): %s\n", i, j, s); ++k1; } }
想法很簡單, 首先我令一個變數 k1,從 0 一直累加到 15。 第一欄要產生 01010101,只要用 k1 % 2 就可以達到這個目的 (% 是求餘數的意思), 第二欄要產生 00110011,週期是 4,所以只要用 k1 % 4,就可以產生 0123 這個序列, 然後要把 0123 變成 0011 的話,只要做除以 2 的動作就好了,第三欄第四欄就依此類推囉。
No comments:
Post a Comment