問題:三對情侶參加婚禮,3個新郎a、b、c,3個新娘x、y、z,有人想知道究竟誰和誰結婚,于是就問新人中的三位,得到如下提示:a說他将和x結婚;x說他的未婚夫是c;c說他将和z結婚。這人事後知道他們都在開玩笑,說的全是假話,那麼究竟誰與誰結婚呢?
思路:用“a=1”表示新郎a和新娘x結婚,同理,如果新郎a不與新娘x結婚則寫成“a!=1”,即x,y,z使用1,2,3表示,根據題意可以得到如下的表達式:
a!=1 a不與x結婚
c!=1 c不與x結婚
c!=3 c不與z結婚
其實根據上面3個表達式,我們就可以進行推理結果了:
c不與x,z結婚,那麼肯定是和y結婚,是以c=2
a不與x結婚,那麼肯定是與z結婚,是以a=3
最後剩下的肯定是b與x結婚,即b=1
那麼我們如何使用程式表達呢?是想,對于新郎而言,每一個人都可能與三位新娘中的任意一位結婚,是以我們需要根據事先已知條件周遊所有的情況,得到最終結果,但是還需要注意一個隐含的條件,那就是,3個新郎不能夠互為配偶,即a!=b且b!=c且a!=c。
具體代碼實作:
int main(int argc, const char * argv[]) {
int a,b,c;
for (a = 1; a <= 3; a++) { //窮舉a的所有可能性
for (b = 1; b <= 3; b++) { //窮舉b的所有可能性
for (c = 1; c <= 3; c++) { //窮舉c的所有可能性
if (a != 1 && c != 1 && c != 3 && a !=b && b != c && a != c) {
//如果表達式為真輸出結果,否則繼續下次循環
printf("%c 将嫁給 a\n",'x' + a - 1);
printf("%c 将嫁給 b\n",'x' + b - 1);
printf("%c 将嫁給 c\n",'x' + c - 1);
}
}
}
}
/*
輸出結果:
z 将嫁給 a
x 将嫁給 b
y 将嫁給 c
printf("%c 将嫁給 a\n",'x' + a - 1); 函數解釋:%c表示輸出一個字元,'x' + a - 1表示字元x加上某個數值,其結果會得到另外一個字元,這裡涉及到ASCII值,每一個字母都對應一個值。是以在計算之後會得到對應的x,y,z.可以看下表:
*/
return 0;
}
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICN4kTM1IzMyIzNyIDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)