Resolver problemas de lógica con la programación.

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))
Publicado 8 artículos originales · elogiado 7 · visitas 349

Supongo que te gusta

Origin blog.csdn.net/weixin_45824303/article/details/105180682
Recomendado
Clasificación