天天看點

C語言-婚禮上的謊言

問題:三對情侶參加婚禮,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;
}
           
C語言-婚禮上的謊言

繼續閱讀