C語言中的盜賊(小偷)問題詳解

問題描述:警察審問4名竊賊嫌疑犯。現在已知,這4人當中僅有一名是竊賊,還知道這4個人中的每個人要麼是誠實的,要麼總是說謊。

這4個人給警察的回答如下。

甲說:“乙沒有偷,是丁偷的。”

乙說:“我沒有偷,是丙偷的。”

丙說:“甲沒有偷,是乙偷的。”

丁說:“我沒有偷。”

請根據這4個人的回答判斷誰是竊賊。

分析過程:突破點從丁開始,因為根據丁的回答是無法判斷的,而且我們可以發現甲乙丙三人的回答是十分相似的(如果不是ta,就是ta),我們現在先不去考慮甲乙丙誰說謊誰不說謊。我們先把甲乙丙丁設成ABCD,變量為1的是盜賊,那麼

甲—B+D==1;

乙—B+C==1;

丙—A+B==1;

丁—A+B+C+D==1;

根據這四個人可以得到這四個條件

假定一個人是盜賊 代入這四個條件中

 第一種:

#include <stdio.h>
int main()
{
    int A,B,C,D;
    for(A=0; A<=1; A++)
        for(B=0; B<=1; B++)
            for(C=0; C<=1; C++)
                for(D=0; D<=1; D++)
                {
                    if(B+D==1&&B+C==1&&A+B==1&&A+B+C+D==1)
 
                        if(A)
                            printf("甲是竊賊\n");
                        else if(B)
                            printf("乙是竊賊\n");
                        else if(C)
                            printf("丙是竊賊\n");
                        else
                            printf("丁是竊賊\n");
                }
 
}

第二種:隻用一個for循環就可以瞭 假定一個人為盜賊代入條件

#include <stdio.h>
int main()
{
    int i,A=1,B=0,C=0,D=0;
    for(i=0; i<=1; i++)
        if(B+D==1&&B+C==1&&A+B==1)
            break;
        else
        {
            if(i==1)
            {
                A=0;
                B=1;
            }
            if(i==2)
            {
                B=0;
                C=1;
            }
            if(i==3)
            {
                C=0;
                D=1;
            }
        }
    if(i==1)
        printf("甲是盜賊");
    if(i==2)
        printf("乙是盜賊");
    if(i==3)
        printf("丙是盜賊");
    if(i==4)
        printf("丁是盜賊");
 
}

到此這篇關於C語言中的盜賊(小偷)問題詳解的文章就介紹到這瞭,更多相關C語言盜賊問題內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: