Задача Эйнштейна или про рыбку

Опубликовано Mar 29, 2012 в Математика и логика | 14 коммент.



Задача Эйнштейна или про рыбку

Вот замечательная задача. Она очень известная, да и как же иначе, если принять во внимание, кто ее автор. Готовое решение в Сети, конечно же, найдется мгновенно. Но если есть интерес – задача стоит того, чтобы спокойно подумать о ней самостоятельно и заслуженно порадоваться, если решение найдено только с помощью карандаша и бумаги.

Условия задачи:
1. Есть пять домов разного цвета: красный, зеленый, белый, желтый и синий.
2. Каждый населен человеком разной национальности: немец, швед, датчанин, норвежец и англичанин.
3. Каждый из них пьет один вид напитков, курит одну марку сигарет и держит одно домашнее животное.
4. Каждый из них уникален в пределах группы (напиток, марка сигарет, животное не повторяется!).
Вопрос: кто держит рыбку?

В ваших поисках Вам помогут следующие ключи:
1. Англичанин живет в красном доме.
2. Швед держит собаку.
3. Датчанин пьет чай.
4. Зеленый дом — налево от белого, и …
5. … его жилец пьет кофе.
6. Курильщик Pall Mall держит птичку.
7. Жилец дома, находящегося в середине, пьет молоко.
8. Жилец желтого дома курит Dunhill.
9. Норвежец живет в первом доме.
10. Курильщик Marlboro живет рядом с владельцем кота.
11. Владелец лошади живет рядом с курильщиком Dunhill.
12. Курильщик Winfield пьет пиво.
13. Дом Норвежца — рядом с синим домом.
14. Немец курит Rothmans.
15. Курильщик Marlboro живет рядом с тем, кто пьет воду.

Ответ

Первый дом: норвежец, желтый дома, Dunhill, кошка, вода.

Второй дом: датчанин, голубой дом, Marlboro, лошадь, чай.

Третий дом: англичанин, красный дом, PallMall, птица, молоко.

Четвертый дом: немец, зеленый дом, Rothmans, рыба, кофе.

Пятый дом: швед, белый дом, Winfield, собака, пиво.

Рыбку держит немец.


Автор публикации:

14 Коммент. : “Задача Эйнштейна или про рыбку”

  1. На всякий случай стоит добавить, что дома (все 5) стоят в один ряд.

    Классная задача

    • Да, конечно, считается, что это предположение должно прийти в голову решающему.

    • burning_LEGION says:

      не нужно так считать,или есть шанс что получится тупик, когда я решал задачку, считал что они живут на абстрактоной улице, которая является кольцом и крайние дома на ней соседи, но дома как бы пронумерованы, чтобы в условие задачи вписаться, т.к. в ней 1й и средний дома фигурируют

  2. Александр says:

    На самом деле ничего сложного в ней нет.
    Вот только Эйнштейн говорил, что только 2% ее смогут решить в уме (без записей на бумаге), а вот это уже гораздо сложнее.

  3. Александр says:

    Если считать порядок домов справа-налево, то жители домов 4 и 5 меняются местами. (но на правильность ответа это не влияет)

  4. Александр says:

    Уже решал… Давно правда. Если память не изменяет, то немец.

  5. АЛЕКСАНДР says:

    Была под ДОС программулина, “Sherlock” называется, похожа на данную задачу.

  6. Евгений says:

    решил задачу за 25 минут .

  7. немец, который живет в зеленом доме, любит кофе :) и курит Rothnans

  8. Оксана says:

    я решила ее и у меня получился другой ответ:
    1 дом:зелёный ,норвежец ,кофе,Malboro,рыба
    2 дом:синий ,немец,вода,Rothmas,кошка
    3 дом:желтый ,швед,молоко,Dunhill,собака
    4 дом:красный ,англичанин,пиво,Winfield,лошадь
    5 дом:белый,датчанин,чай,Pallmall,птица
    Сколько проверяла,всё под условие подходит…

  9. Я решил эту задачу и решил написать на С, кому интересно будет)

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
     
    void out()
    {
    	printf("1. English man lives in red house\n");
    	printf("2. Sweden man has a dog\n");
    	printf("3. Denmark man driks tea\n");
    	printf("4. Green house located to the left from the white and...\n");
    	printf("5. ... His owner drinks coffee\n");
    	printf("6. The one who smokes chesterfield has a bird\n");
    	printf("7. The one, who lives in the middle, drinks a milk\n");
    	printf("8. The one who lives in the yellow house smokes dunhill\n");
    	printf("9. Norway man lives in the first house\n");
    	printf("10. Man who smokes Marlboro lives near cat owner\n");
    	printf("11. Horse owner lives near dunhill smoker\n");
    	printf("12. Winfiled smoker drinks beer\n");
    	printf("13. Norway house located near blue house\n");
    	printf("14. German man smokes boss\n");
    	printf("15. Marlboro smoker lives near water consumer\n");
    	printf("\n\n\n\n");
     
    }
     
     
    int main()
    {
    	const char *c[5], *c1[5];
    	const char *n[5], *n1[5];
    	const char *d[5], *d1[5];
    	const char *a[5], *a1[5];
    	const char *t[5], *t1[5];
    	c[0] = "Yellow";	c[1] = "Blue";	c[2] = "Red";	c[3] = "Green";	c[4] = "White";
    	n[0] = "Norway";	n[1] = "Denmark";	n[2] = "England";	n[3] = "Germany";	n[4] = "Sweden";
    	d[0] = "Water";		d[1] = "Tea";	d[2] = "Milk";	d[3] = "Coffee";	d[4] = "Beer";
    	a[0] = "Cat";		a[1] = "Horse";	a[2] = "Bird";	a[3] = "Fish";		a[4] = "Dog";
    	t[0] = "Dunhill";	t[1] = "Marlboro";	t[2] = "Chesterfield";	t[3] = "Boss";	t[4] = "Winfield";
    	int x,y,z,k,g;
    	for (z = 0; z < 5; z++)
    	{
    		c1[z] = "0";
    		n1[z] = "0";
    		d1[z] = "0";
    		a1[z] = "0";
    		t1[z] = "0";
    	}
     
    	out();
     
    	do
    	{
     
    		printf("Choose an option:\n");
    		printf("1. Show again\n");
    		printf("2. Add infromation\n");
    		printf("3. Show information\n");
    		printf("4. Check\n");
    		scanf("%d", &x);
    		switch (x)
    		{
    		case 1: out();
    			break;
    		case 2: 
    		{
    			printf("Choose house number: ");
    			scanf("%d", &z);
    			z = z - 1;
    			printf("What do you want to add?\n");
    			printf("1. House color\n");
    			printf("2. Liver's nationality\n");
    			printf("3. What he drinks\n");
    			printf("4. His animal\n");
    			printf("5. What he smokes\n");
    			scanf("%d", &y);
    			switch (y)
    			{
    			case 1:
    			{
    				printf("Choose a color: \n");
    				printf("1 - Red\n");
    				printf("2 - Yellow\n");
    				printf("3 - White\n");
    				printf("4 - Blue\n");
    				printf("5 - Green\n");
    				scanf("%d", &k);
    				switch (k)
    				{
    				case 1: c1[z] = c[2]; break;
    				case 2: c1[z] = c[0]; break;
    				case 3: c1[z] = c[4]; break;
    				case 4: c1[z] = c[1]; break;
    				case 5: c1[z] = c[3]; break;
    				}
    				break;
    			}
    			case 2:
    			{
    				printf("Choose nationality: \n");
    				printf("1 - Denmark\n");
    				printf("2 - England\n");
    				printf("3 - Norway\n");
    				printf("4 - Sweden\n");
    				printf("5 - German\n");
    				scanf("%d", &k);
    				switch (k)
    				{
    				case 1: n1[z] = n[1]; break;
    				case 2: n1[z] = n[2]; break;
    				case 3: n1[z] = n[0]; break;
    				case 4: n1[z] = n[4]; break;
    				case 5: n1[z] = n[3]; break;
    				}
    				break;
    			}
    			case 3:
    			{
    				printf("Choose a drink: \n");
    				printf("1 - Beer\n");
    				printf("2 - Tea\n");
    				printf("3 - Coffee\n");
    				printf("4 - Milk\n");
    				printf("5 - Water\n");
    				scanf("%d", &k);
    				switch (k)
    				{
    				case 1: d1[z] = d[4]; break;
    				case 2: d1[z] = d[1]; break;
    				case 3: d1[z] = d[3]; break;
    				case 4: d1[z] = d[2]; break;
    				case 5: d1[z] = d[0]; break;
    				}
    				break;
    			}
    			case 4:
    			{
    				printf("Choose an animal: \n");
    				printf("1 - Horse\n");
    				printf("2 - Cat\n");
    				printf("3 - Dog\n");
    				printf("4 - Fish\n");
    				printf("5 - Bird\n");
    				scanf("%d", &k);
    				switch (k)
    				{
    				case 1: a1[z] = a[1]; break;
    				case 2: a1[z] = a[0]; break;
    				case 3: a1[z] = a[4]; break;
    				case 4: a1[z] = a[3]; break;
    				case 5: a1[z] = a[2]; break;
    				}
    				break;
    			}
    			case 5:
    			{
    				printf("Choose ciggarettes: \n");
    				printf("1 - Chesterfield\n");
    				printf("2 - Boss\n");
    				printf("3 - Winfield\n");
    				printf("4 - Dunhill\n");
    				printf("5 - Marlboro\n");
    				scanf("%d", &k);
    				switch (k)
    				{
    				case 1: t1[z] = t[2]; break;
    				case 2: t1[z] = t[3]; break;
    				case 3: t1[z] = t[4]; break;
    				case 4: t1[z] = t[0]; break;
    				case 5: t1[z] = t[1]; break;
    				}
    				break;
    			}
    			break;
     
    			}
    			break;
    		}
    		case 3:
    		{
    			printf("		1	2	3	4	5\n");
    			printf("color:		%s	%s	%s	%s	%s\n", c1[0],c1[1],c1[2],c1[3],c1[4]);
    			printf("nation:		%s	%s	%s	%s	%s\n", n1[0],n1[1],n1[2],n1[3],n1[4]);
    			printf("drink:		%s	%s	%s	%s	%s\n", d1[0],d1[1],d1[2],d1[3],d1[4]);
    			printf("animal:		%s	%s	%s	%s	%s\n", a1[0],a1[1],a1[2],a1[3],a1[4]);
    			printf("cig:		%s	%s	%s	%s	%s\n", t1[0],t1[1],t1[2],t1[3],t1[4]);
    			break;
    		}
    		case 4:
    			for (z = 0; z < 5; z++)
    			{
    				g = 0;
    				if (c1[z] == c[z] && a1[z] == a[z] && t1[z] == t[z] && d1[z] == d[z] && n1[z] == n[z])
    				{	
    					g++;
    				}
     
    				else
    				{
    					printf("Something is not right\n");
    					break;
    				}
    			}
    		}
     
    	} while (g != 4);
    	printf("Everything is correct\n");
     
    	system("pause");
    }
  10. Алексей says:

    Ну я к примеру воображение включил, и о радуге подумал и методику экрана моника\телефона и т.п
    мне кажется в инете неправельный ответ, математика одно-а воображение…. тут есть еще ответ)))

Оставить комментарий

Ваш адрес email не будет опубликован.


*