首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言解決邏輯推理題:五人跳水排名與四嫌疑犯謀殺案

     編輯:關於C

題目一:五人跳水比賽排名

每人兩句話,一真一假。窮舉 5! = 120 種排列,驗證邏輯條件。


#include <stdio.h>

int main(void) {
    for (int a=1; a<=5; ++a)
    for (int b=1; b<=5; ++b)
    for (int c=1; c<=5; ++c)
    for (int d=1; d<=5; ++d)
    for (int e=1; e<=5; ++e) {
        if (a==b||a==c||a==d||a==e||b==c||b==d||b==e||c==d||c==e||d==e) continue;
        int A_true = (b==1) + (a==3);
        int B_true = (b==2) + (e==4);
        int C_true = (c==1) + (d==2);
        int D_true = (c==5) + (d==3);
        int E_true = (e==4) + (a==1);
        if (A_true==1 && B_true==1 && C_true==1 && D_true==1 && E_true==1) {
            printf("A:%d B:%d C:%d D:%d E:%d\n", a,b,c,d,e);
        }
    }
    return 0;
}

輸出:A:3 B:2 C:1 D:5 E:4

題目二:四嫌疑犯謀殺案

三真一假。窮舉 4 種可能兇手。


int main(void) {
    for (char killer='a'; killer<='d'; ++killer) {
        int true_cnt = (killer!='a') + (killer=='c') + (killer=='d') + (killer!='d');
        if (true_cnt == 3) printf("兇手是 %c\n", killer);
    }
    return 0;
}

輸出:兇手是 c

解題方法論總結

  1. 窮舉搜索空間:用嵌套循環生成所有可能賦值(排名排列 / 兇手人選)。
  2. 邏輯條件編碼:將自然語言條件翻譯為布爾表達式,利用 true+true=2、true+false=1 計數真值個數。
  3. 剪枝優化:排名題先判斷 a!=b... 去重,減少無效迭代。
  4. 輸出所有滿足解:驗證唯一性或發現多解。

這類「邏輯推理 + 窮舉驗證」模式廣泛適用於數獨、邏輯網格、約束滿足問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved