當前位置:首頁 » 編程語言 » c語言判斷三人說真話
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言判斷三人說真話

發布時間: 2022-11-03 03:23:59

1. 怎麼樣求解一道關於邏輯推理的題目,用c語言實現。比如破案,比如誰誰在撒謊,比如誰誰說的是真話。

比較費勁,我覺得關鍵是一定要搞清楚 要用什麼條件表達式表示真假的組合。然後套在一堆兒循環里遍歷所有的情況,找個所有條件都滿足的就是了。

2. C語言解題:

#include <stdio.h>
main()
{
int a,b,c,d; //定義四個變數 用來表示他是否是小偷,為1表示是小偷,0表示不是小偷
int i=1; //定義變數i用來測試4個人的說話情況
a=b=c=d=0;
while((a+b+c+d)!=1) //小偷只有一個 當他們所說的情況之和為1 說明假設是正確的
{
switch(i++)
{
case 1:a=1;c=1;d=1;d=0;break; //設第1個人說的是假話
case 2:a=0;c=0;d=1;d=0;break; //設第2個人說的是假話
case 3:a=0;c=1;d=0;break; //設第3個人說的是假話
case 4:a=0;c=1;d=1;break; //設第4個人說的是假話
default:break;
}
}
printf("第%d人說的是謊話",i-1);

}

3. C語言編程: 張三說李四說謊,李四說王五說謊,王五說張三和李四都說謊。問誰真誰假。

張三、李四、王五都是假。
真要這么問就是這么回答,因為編程語言就是這么執行的,執行到最後一步,我們不管是誰說,只要能運行就默認執行了,他說了那就是對了,執行到最後一步那就是最後一步了。我用編程語言簡單表達:
//我初始化三個人,默認都沒說謊
public const string s="沒說謊";
public const string l="說謊";
public string 張三=s;
public string 李四=s;
public string 王五=s;
//開始告密事件
private void says()
{
李四=l; //說過了李四是說謊
王五=l; //說過了王五是說謊
張三=l; //說過了張三是說謊
李四=l; //再次賦值說過了李四還是在說謊
print 張三,李四,王五;
}

4. 用c語言的if switch來完成 已經四個人 有一個做了好事的人 三個說真話的

char peo[4] = {};
int laird_index,find_index = -1;
for(int i = 1;i < 4;++i)
{
// A說,不是A B說,是D
// C說,是D D說, C說謊 可以把這句話理解為: 不是D;
laird_index = i;
switch (laird_index) //假設這個說謊的人 是 a - d; 說謊的人說的話,就不算數,被注釋;
{
case 0://A說謊
{
//peo[0] +=1;
peo[3] +=1;
peo[3] +=1;
peo[3] -=1;
break;
}
case 1://b說謊
{
peo[0] -=1;
//peo[3] -=1;
peo[3] +=1;
peo[3] -=1;
break;
}
case 2://c說謊
{
peo[0] -=1;
peo[3] +=1;
//peo[3] +=1;
peo[3] -=1;
break;
}
case 3://d說謊
{
peo[0] -=1;
peo[3] +=1;
peo[3] +=1;
//peo[3] -=1;
break;
}
}
//驗證下; 這個數組必定有 且僅有一個人 被 大於1個人所承認;
//並且 不關 bc的事,因為沒有人承認過他們;
//所以 好人只能是 A、D之中產生;

if(peo[0]< 0 && peo[3] > 0)
{
find_index = 3;
break;
}
else if(peo[0] > 0 && peo[3] < 0)
{
find_index = 0;
break;
}
}
switch (find_index)
{
case -1:
cout<<"沒有找到"<<endl;break;
case 0:
cout<<"好人是A"<<endl;break;
case 3:
cout<<"好人是D"<<endl;break;
}

5. c語言 張三說李四在說謊,李四說王五在說謊,王五說張三和李四都在說謊。現在問:這三人中到底誰說的是真

如果連這種問題你都搞不定的話,別學計算機了.結果是:張三在說謊,李四說真話,王五說謊.這種問題一般先假定一真,再來邏輯推理得出結論

6. 關於C語言問題 張三李四王五說謊的問題

就是讓 王五說張三和李四都在說謊 這個條件成立
(c&&a+b==0||!c&&a+b!=0))
如果張三說的是真的 c&&a+b==0就是1
否則!c&&a+b!=0就是1

if里的三個條件都是1 的時候 此時的三個人說謊與否的情況就是對的

7. 張三說李四在說謊,李四說王五在說謊,王五說張三和李四都在說謊。誰是真的,誰是假的,用c語言做

#include<stdio.h>
int isreal(int,int,int);
int main()
{
int p[3];//假使說謊值為0 沒說謊值為1 3人實際就是000~111的二進制數組合
char *szhang3="真話",*sli4="真話",*swang5="真話";
p[0]=0;p[1]=0;p[2]=0;
while(1)
{
if(isreal(p[0],p[1],p[2])==1)
{
if(p[0]==0)
{
szhang3="假話";
}
if(p[1]==0)
{
sli4="假話";
}
if(p[2]==0)
{
swang5="假話";
}
printf("張三說的是%s,李四說的是%s,王五說的是%s",szhang3,sli4,swang5);
}
if(++p[2]>1)
{
p[2]=0;
if(++p[1]>1)
{
p[1]=0;
if(++p[0]>1)
{
p[0]=0;
}
}
}
if(p[0]==0 && p[1]==0 && p[2]==0)
{
break;
}
}
return 1;
}
int isreal(int zhang3,int li4,int wang5) //把三人假定值傳入,返回1假設成立; 返回0假設不成立
{
if(zhang3!=li4 && li4!=wang5 && wang5!=(zhang3+li4))
{
return 1;
}
return 0;
}

8. 關於C語言編程問題

/*想了一會兒,不知你覺得怎樣*/
#include <stdio.h>
main()
{
int a,b,c,d;
a = 1;b = 1;c = 1;d = 1;
while((a+b+c+d)!=3) /*當只有一個為 0 時 則為 0 的說法錯誤*/
{
if(a==1) /*A說:不是我;則維持假設(都正確) */
{;}
if(b==1) /*B說:是C;則c說法錯誤,a,b,d正確 */
{c=0;a=b=d=1;}
if(c==1) /*C說:是D;則d說法錯誤,a,b,c正確 */
{d=0;a=b=c=1;}
if(d==1) /*D說:他胡說;則c說法錯誤,a,b,d正確 */
{c=0;a=b=d=1;}
}
printf("a=%d b=%d c=%d d=%d\n",a,b,c,d);
if(a==0)
printf("A is lying\n");
if(b==0)
printf("B is lying\n");
if(c==0)
printf("C is lying\n");
if(d==0)
printf("D is lying\n");

}
/*用C編寫一段程序:
有四個人,其中有一個人做了好事,但他們都有自己不同的說法:
A說:不是我;
B說:是C;
C說:是D;
D說:他胡說;

四人中只有一人是說假話,其餘三人都是說真話。不能使用數組、指針。
*/

9. 張三說李四在說謊,李四說王五在說謊,王五說張三和李四都在說謊。現在問:這三人中到底誰說的是真話,誰

李四說的真話。

以下內容轉載自:網頁鏈接

(第一篇博文)

今天在一個交流群里見他們無聊,然後找到之前收藏的一些c語言題目放出去想讓他們做,結果反倒是自己不會做,於是花了很多時間去想。

原題:張三說李四在說謊,李四說王五在說謊,王五說張三和李四都在說謊。現在問:這三人中到底誰說的是真話,誰說的是假話?

其實問題本身並不難,只是一開始想多了,陷入死循環。

那這個問題的突破口在哪裡呢?

不管誰說謊,每個人都有兩個狀態 真和假

由此,我們就可以確定,我們有循環嵌套:


10. a說b說謊,b說c說謊,c說ab說謊,用c語言如何判斷,誰說的是真話誰說的是假話

假設c說的正確,那麼a是假話,則a說b說謊是假的,則b說的是真話,若b是真話,通過b說c說謊,那c就是假話,與前面假設的條件不符,則c一定說的是假話