將邏輯題目中的信息用數字化描述。
2. 範例:
(1) 例1:
問題描述: 警察局抓了a、b、c、d四名偷竊嫌疑犯,其中只有一人是小偷。審問結果如下。
a說:"我不是小偷。"
b說:"c是小偷。"
c說:"小偷肯定是d。"
d說:"c在冤枉人。"
現在已經知道4個人中3人說的是真話,一人說的是假話,問到底誰是小偷?
問題分析:將a、b、c、d四人進行編號,分別爲1,2,3,4。
用x存放小偷的編號,則x的取值範圍從1~4。
4個人所說的話可以分別寫成:
a說的話:x != 1
b說的話:x == 3
c說的話:x == 4
d說的話:x != 4
代碼如下:
- package boke.written;
- public class InfoToNumber {
- /**
- * @param args
- */
- public static void main(String[] args) {
- int x;
- for (x = 1; x <= 4; x++) {
- int s = 0;
- if (x != 1) {
- s++;
- }
- if (x == 3) {
- s++;
- }
- if (x == 4) {
- s++;
- }
- if (x != 4) {
- s++;
- }
- if (s == 3) {
- char ch = (char) (64+x);
- System.out.println(ch + "是小偷");
- }
- }
- }
- }
- 輸出結果:C是小偷
package boke.written;
public class InfoToNumber {
/**
* @param args
*/
public static void main(String[] args) {
int x;
for (x = 1; x <= 4; x++) {
int s = 0;
if (x != 1) {
s++;
}
if (x == 3) {
s++;
}
if (x == 4) {
s++;
}
if (x != 4) {
s++;
}
if (s == 3) {
char ch = (char) (64+x);
System.out.println(ch + "是小偷");
}
}
}
}
輸出結果:C是小偷
(2) 例2:
問題描述: 3位老師對某次數學競賽進行了預測。他們預測的結果如下。
甲說:學生A得第一名,學生B得第三名。
乙說:學生C得第一名,學生D得第四名。
丙說:學生D得第二名,學生A得第三名。
競賽結果表明,他們都說對了一半,說錯了一半,並且無並列名次,求A、B、C、D各自的名次。
問題分析: 用數字1、2、3、4來表示學生A、B、C、D獲得的名次。
甲說的話:(A == 1) + (B == 3) = 1;
已說的話:(C == 1) + (D == 4) = 1;
丙說的話:(D == 2) + (A == 3) = 1;
由於無並列名次,四個人的名次之和等於10 = 1 + 2 + 3 + 4。
代碼如下:
- public class InfoToNumber2 {
- /**
- * @param args
- */
- public static void main(String[] args) {
- int A,B,C,D;
- for (A = 1; A <= 4; A++) {
- for (B = 1; B <= 4; B++) {
- if (A != B) {
- for (C = 1; C <= 4; C++) {
- if ((C != A) && (C != B)) {
- D = 10 - A - B -C;
- if ((D != A) && (D != B) && (D != C)) {
- boolean bool1 = false;
- boolean bool2 = false;
- boolean bool3 = false;
- if ((A == 1) || (B == 3)) {
- bool1 = true;
- }
- if ((C == 1) || (D == 4)) {
- bool2 = true;
- }
- if ((D == 2) || (A == 3)) {
- bool3 = true;
- }
- if (bool1 == true && bool2 == true && bool3 == true) {
- System.out.println("A = " + A + " B = " + B + " C = " + C + " D = " + D);
- }
- }
- }
- }
- }
- }
- }
- }
- }
- 輸出結果:A = 4 B = 3 C = 1 D = 2