Algunas personas dicen la verdad, otras dicen mentiras. Estas preguntas lógicas se pueden resolver mediante programación. Estas son algunas de las preguntas que el sujeto ha hecho y se resuelven con lenguaje C y Python.
1. Un asesinato ocurrió en alguna parte, y la policía determinó que el asesino debe ser uno de los cuatro sospechosos. Las siguientes son las confesiones de los cuatro sospechosos.
A dijo: Yo no.
B dijo: Sí C.
C dijo: Sí D.
D dijo: C dice tonterías. Se
sabe que 3 personas dicen la verdad y 1 persona dice la verdad.
Con base en esta información, determine quién es el asesino.
C:
#include<stdio.h>
int main(void)
{
char muderer;
//从A到D遍历一遍,假设其中一个是凶手
for(muderer = 'A'; muderer <= 'D'; muderer++)
{
//if语句里为各自说的话,逻辑值加起来为3
if((muderer != 'A') + (muderer == 'C') + (muderer == 'D') + (muderer != 'D') == 3)
{
printf("凶手是%c", muderer);
}
}
return 0;
}
Pitón:
for muderer in ['A', 'B', 'C', 'D']:
if((muderer != 'A') + (muderer == 'C') + (muderer == 'D') + (muderer != 'D') == 3):
print("凶手是%c" % muderer)
2. Cinco atletas participaron en la competencia de buceo de 10 metros. Algunas personas les pidieron que pronosticaran el resultado de la competencia. El
jugador A dijo: B segundo, yo tercero; el
jugador B dijo: yo segundo, E cuarto; el
jugador C dijo: primero , D segundo;
D jugador dijo: C último, yo era tercero;
E jugador dijo: I cuarto, A primero;
después del juego, cada jugador tenía la mitad de razón, confirma la clasificación del juego.
C:
#include<stdio.h>
int main(void)
{
int A, B, C, D, E;
//由于下面if语句过长,for语句省略大括号
for(A = 1; A < 6; A++)
for(B = 1; B < 6; B++)
for(C = 1; C < 6; C++)
for(D = 1; D < 6; D++)
for(E = 1; E < 6; E++)
if(A != B && A != C && A != D && A != E && B != C && B != D && B != E && C != D && C != E && D != E)
if(((A==3)+(B==2))==1 && ((B==2)+(E==4))==1 && ((C==1)+(D==2))==1 && ((C==5)+(D==3))==1 && ((A==1)+(E==4))==1)
printf("A = %d\nB = %d\nC = %d\nD = %d\nE = %d\n", A, B, C, D, E);
return 0;
}
Python: (sin diferencia de C ...)
for A in range(1, 6):
for B in range(1, 6):
for C in range(1,6):
for D in range(1, 6):
for E in range(1, 6):
if(A != B and A != C and A != D and A != E and B != C and B != D and B != E and C != D and C != E and D != E):
if(((A==3)+(B==2))==1 and ((B==2)+(E==4))==1 and ((C==1)+(D==2))==1 and ((C==5)+(D==3))==1 and ((A==1)+(E==4))==1):
print("A = %d" % A)
print("B = %d" % B)
print("C = %d" % C)
print("B = %d" % B)
print("E = %d" % E)
3. Hay tres miembros de A, B y C. A dijo que B mintió, B dijo que C mintió, y C dijo que A y B mintieron, juzgando cuál de los tres dijo la verdad y quién dijo la falsa.
C:
#include<stdio.h>
int main(void)
{
int a, b, c; //用abc表示甲乙丙
//列举所有情况
for(a = 0; a <= 1; a++)
for(b = 0; b <= 1; b++)
for(c = 0; c <= 1; c++)
if((a&&!b||!a&&b) && (b&&!c||!b&&c) && (c&&a+b==0||!c&&a+b!=0))
{
printf("甲说%s\n", a ? "真话" : "假话");
printf("乙说%s\n", b ? "真话" : "假话");
printf("丙说%s\n", c ? "真话" : "假话");
}
return 0;
}
Pitón:
for a in range(0, 2):
for b in range(0, 2):
for c in range(0, 3):
if((a and not b or not a and b) and (b and not c or not b and c) and (c and a+b==0 or not c and a+b!=0)):
print("甲说真话" if(a) else "甲说假话")
print("乙说真话" if(b) else "乙说假话")
print("丙说真话" if(c) else "丙说假话")
4. Hay cinco hermanos, cada uno diciendo una palabra: El
jefe dijo: Uno de nosotros está mintiendo.
El segundo niño dijo: Dos de nosotros estamos mintiendo.
El tercer hombre dijo: Tres de nosotros mentimos.
El cuarto hombre dijo: Cuatro de nosotros mentimos.
Lao Wu dijo: Los cinco estamos mintiendo.
¿Juez que dijo la verdad? ¿Quién dijo mentiras?
C:
#include<stdio.h>
int main(void)
{
int a, b, c, d, e;//表示五兄弟
for(a = 0; a <= 1; a++)
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&&a+b+c+d+e==4||!a&&a+b+c+d+e!=4) && (b&&a+b+c+d+e==3||!b&&a+b+c+d+e!=3) && (c&&a+b+c+d+e==2||!c&&a+b+c+d+e!=2) && (d&&a+b+c+d+e==1||!d&a+b+c+d+e!=1) && (e&&a+b+c+d+e==0||!e&&a+b+c+d+e!=0))
{
printf("老大说的是%s\n", a ? "真话" : "假话");
printf("老二说的是%s\n", b ? "真话" : "假话");
printf("老三说的是%s\n", c ? "真话" : "假话");
printf("老四说的是%s\n", d ? "真话" : "假话");
printf("老五说的是%s\n", e ? "真话" : "假话");
}
return 0;
}
Python es similar, así que no entraré en detalles aquí.
5. Alguien en A, B, C rompió el cristal. A dijo que B lo hizo, B dijo que D lo hizo, C dijo que no lo hizo y Ding también dijo que no lo hizo.
Se sabe que tres de los cuatro dijeron mentiras y juzgaron quién rompió el cristal.
C:
#include<stdio.h>
int main(void)
{
char suspect;
for(suspect = 'a'; suspect <= 'd'; suspect++)
if((suspect == 'b') + (suspect == 'd') + (suspect != 'c') + (suspect !='d') == 1)
switch (suspect)
{
case 'a': printf("甲打碎了玻璃"); break;
case 'b': printf("乙打碎了玻璃"); break;
case 'c': printf("丙打碎了玻璃"); break;
case 'd': printf("丁打碎了玻璃"); break;
default: break;
}
return 0;
}
Pitón:
#利用Python的字典实现C的switch语句
dic = {'a':"甲打碎了玻璃", 'b':"乙打碎了玻璃", 'c':"丙打碎了玻璃", 'd':"丁打碎了玻璃"}
for suspect in ['a', 'b', 'c', 'd']:
if((suspect == 'b') + (suspect == 'd') + (suspect != 'c') + (suspect !='d') == 1):
print(dic.get(suspect))