国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C趣味程序百例(16)

2019-11-17 05:40:28
字體:
來源:轉載
供稿:網友

51.誰是竊賊
52.黑與白
53.迷語博士的難題(1)
54.迷語博士的難題(2)




51.誰是竊賊
    公安人員審問四名竊賊嫌疑犯。已知,這四人當中僅有一名是竊賊,還知道這四人中每人要么是老實的,要么總是說謊的。在回答公安人員的問題中:
        甲說:“乙沒有偷,是丁偷的。”
        乙說:“我沒有偷,是丙便的。”
        丙說:“甲沒有偷,是乙偷的。”
        丁說:“我沒有偷。”
    請根據這四人的答話判定誰是盜竊者。
*問題分析與算法設計
    假設A、B、C、D分別代表四個人,變量的值為1代表該人是竊賤。
    由題目已知:四人中僅有一名是竊賤,且這四個人中的每個人要么說真話,要么說假話,而由于甲、乙、丙三人都說了兩句話:“X沒偷,X偷了”,故不論該人是否說謊,他提到的兩人中必有一人是小偷。故在列條件表達式時,可以不關心誰說謊,誰說實話。這樣,可以列出下列條件表達式:
        甲說:”乙沒有偷,是丁偷的。”        B+D=1
        乙說:“我沒有偷,是丙偷有。”        B+C=1
        丙說:“甲沒有偷,是乙偷的。”        A+B=1
        丁說:“我沒有偷。”                  A+B+C+D=1
    其中丁只說了一句話,無法判定其真假,表達式反映了四人中僅有一名是竊賤的條件。
*程序與程序注釋
#include<stdio.h>
void main()
{
    int i,j,a[4];
    for(i=0;i<4;i++)            /*假定只有第i個人為竊賤*/
    {
        for(j=0;j<4;j++)        /*將第i個人設置為1表示竊賤,其余為0*/
            if(j==i)a[j]=1;
            else a[j]=0;
        if(a[3]+a[1]==1&&a[1]+a[2]==1&&a[0]+a[1]==1)   /*判定條件是否成立*/
        {
                        for(j=0;j<=3;j++)                   /*輸出計算結果*/
                if(a[j])printf("%c.",j+'A');
            printf("/n");
        }
    }
}
*運行結果
The thief is B.       (乙為竊賤。)----------------------------------------------------52.黑與白
    有A、B、C、D、E五人,每人額頭上都帖了一張黑或白的紙。五人對坐,每人都可以看到其它人額頭上的紙的顏色。五人相互觀察后,
    A說:“我看見有三人額頭上帖的是白紙,一人額頭上帖的是黑紙。”
    B說:“我看見其它四人額頭上帖的都是黑紙。”
    C說:“我看見一人額頭上帖的是白紙,其它三人額頭上帖的是黑紙。”
    D說:“我看見四人額頭上帖的都是白紙。”
    E什么也沒說。
    現在已知額頭上帖黑紙的人說的都是謊話,額頭帖白紙的人說的都是實話。問這五人誰的額頭是帖白紙,誰的額頭是帖黑紙?
*問題分析與算法設計
    假如變量A、B、C、D、E表示每個人額頭上所帖紙的顏色,0 代表是黑色,1 代表是白色。根據題目中A、B、C、D四人所說的話可以總結出下列關系:
    A說: a&&b+c+d+e==3!a&&b+c+d+e!=3
    B說: b&&a+c+d+e==0!b&&a+c+d+e!=0
    C說: c&&a+b+d+e==1!c&&a+b+d+e!=1
    D說: d&&a+b+c+e==4!d&&a+b+c+e!=4
    窮舉每個人額頭所帖紙的顏色的所有可能的情況,代入上述表達式中進行推理運算,使上述表達式為“真”的情況就是正確的結果。
*程序與程序注釋
#include<stdio.h>
void main()
{
    int a,b,c,d,e;
    for(a=0;a<=1;a++)            /*黑色:0   白色:1*/
        for(b=0;b<=1;b++)        /*窮舉五個人額頭帖紙的全部可能*/
            for(c=0;c<=1;c++)
                for(d=0;d<=1;d++)
                    for(e=0;e<=1;e++)
                        if((a&&b+c+d+e==3!a&&b+c+d+e!=3)
                            &&(b&&a+c+d+e==0!b&&a+c+d+e!=0)
                            &&(c&&a+b+d+e==1!c&&a+b+d+e!=1)
                            &&(d&&a+b+c+e==4!d&&a+b+c+e!=4))
                        {
                            printf("A is pasted a piece of %s paper on his forehead./n",
                                                            a?"white":"black");
                            printf("B is pasted a piece of %s paper on his forehead./n",
                                                            b?"white":"black");
                            printf("C is pasted a piece of %s paper on his forehead./n",
                   &nb


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 潞城市| 金寨县| 东辽县| 潜江市| 化州市| 温泉县| 武宣县| 武川县| 教育| 杭锦后旗| 灌云县| 合川市| 泰州市| 任丘市| 大埔县| 辽源市| 聂拉木县| 黎平县| 永吉县| 南靖县| 北海市| 孝义市| 滁州市| 盐亭县| 潞西市| 大理市| 呼图壁县| 皮山县| 阿拉尔市| 运城市| 屏东市| 西平县| 拜泉县| 柯坪县| 滕州市| 兴隆县| 凤翔县| 黔东| 达日县| 清水河县| 峡江县|