Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Интересные и занимательные задачи по программированию > 8 монет


Автор: TwisT_X 27.4.2007, 22:06
Имеется 8 с виду одинаковых монет. Одна из них фальшивая и известно, что она легче настоящей. Как с помощью всего лишь двух взвешиваний найти фальшивую монету? В Вашем распоряжении только лабораторные весы, которые показывают только больше-меньше.

Долго думал но так и не нашел на нее ответ!! Поламайте теперь и вы голову если захотите  smile 

Автор: Mymik 27.4.2007, 23:41
Разобьем на три кучки
1 2 3 | 4 5 6 | 7 8

взвесим кучки 123 и 456
если они равны, то взвешивает две монеты -->> на одну чашу 7, а на другую 8.

Если же 123 или 456 не равны. К примеру возьмем, что 123 легче. Тогда кладем на чаши весов 1 и 2 монету. Если они равны, тогда фальшивка монета 3, а если не равны, то та что легче, та и есть фальшивка 


Довольно легкая задача... меньше 5 минут думал

Автор: TwisT_X 28.4.2007, 16:34
Mymik, да уж!! а у меня и нехватило москов это решить  smile 

Автор: VA_DOS 28.4.2007, 17:43
задача на пару минут

Автор: TwisT_X 28.4.2007, 18:45
MymikVA_DOS, могу дать задачку посложнее!! у меня папа просто "кладизь" таких задач!! давать?! тока скажите!! smile 

Автор: Mymik 28.4.2007, 20:57
TwisT_X, конечно же давай

Автор: Shadowlord 28.4.2007, 21:05
TwisT_X,  давайsmile

Автор: TwisT_X 28.4.2007, 21:05
Держите наздоровье  smile  для меня это ваще пока высшая математика  smile 

На столе лежит десять пронумерованных шляп. В каждой шляпе лежит по десять золотых монет. В одной из шляп находятся фальшивые монеты. Настоящая весит 10 граммов, а поддельная только 9. В помощь даны весы со шкалой в граммах. Как определить в какой из шляп находятся фальшивые монеты, используя весы только для одного взвешивания? Весы могут взвешивать не более 750 грамм.

Автор: Fin 28.4.2007, 21:15
Из первой шляпы береш 1 монету со второй 2 ..... с десятой 10 итого получается 55 монет если все настоящие, то обвший  вес должен составлять 550 грам. Теперь сколько грам не достает до данного веса и есть номер шляпы smile  

Автор: TwisT_X 28.4.2007, 21:19
Fin, шо то я не очень понял мож обьяснить поподробнее?!  smile 

Автор: Shadowlord 28.4.2007, 21:32
Еще, еще !!! smile  

Автор: Fin 28.4.2007, 22:26
TwisT_X,  Сколько не будет хватать грам, если допустим в пятой шляпе лежат фальшивки и ты из нее выложил 5 монет? Я думаю ровно 5 грам.

Автор: TwisT_X 29.4.2007, 11:54
Fin, все теперь дошло  smile сенкс


Shadowlord, специально для тебя (другие тоже подключайтесь  smile )

 Задача №3  smile Мега сложная головоломка для самых ... smile  :

Лист бумаги содержит утверждения, пронумерованные от 1 до 100. Утверждение n гласит "ровно n утверждений на этом листе не верны." Какие утверждения истинны а какие ложны? Как изменится ответ, если в условии заменить "ровно" на "по крайней мере"?

Автор: Mymik 29.4.2007, 12:28
TwisT_X
Более одного верного утверждения быть не может, потому как каждое предыдущее утверждение противоречит последующему. Следовательно верным может быть только одно утверждение. А значит ошибочных 99 утверждений.

Если утверждение n-истинно, то утверждения от 1 до n тоже должны быть true :о). Если рассмотреть утверждение 51 то  как максимум 49 утверждений ошибочны (false) значит 51 утверждение ошибочно. Т.е. в утверждениях от 51 и до конца неверные утверждения. 
А значит утверждения от 1 и до 50 верны, а все остальные ошибочны :о)

Автор: TwisT_X 29.4.2007, 14:42
MymikFin, как вы все это угадываете?!  smile 

Задача №4Сводный отряд ветеранов готовится пройтись колонной на соответствующем празднике. Построились по двое. Один остался без пары. Нехорошо. Встали по трое. Опять один - сиротинушка. По четыре и по шесть - ясно, что неровно, но ведь опять один остаётся! Тогда по пять. Тот же результат! Наваждение. Уж для самоуспокоения построились по семеро. И вышло абсолютно ровно. Сколько же людей строилось?

Автор: Shadowlord 29.4.2007, 15:34
По моему минимум 301 

Автор: Mymik 29.4.2007, 19:26
Код

int count = 2;
for (count = 2; ((count % 2) != 1) || ((count % 3) != 1) || ((count % 4)) != 1 || ((count % 5) != 1) || ((count % 6) != 1) || ((count % 7) != 0); count++) ;
Page.Controls.Add(new LiteralControl(count.ToString()));

Дает 301 smile  smile 
И не смотрите на меня как на психа smile

Автор: Shadowlord 29.4.2007, 19:37
TwisT_X,  еще

Mymiksmile))

Автор: Mymik 29.4.2007, 19:56
Shadowlord, а как ты считал ??? неужели постоянно прибавлял число 7 и проверял делиться ли сумма или нет ??? :о).

P.S. в программировании сила :о) smile 

Автор: Samotnik 29.4.2007, 20:51
Я первые 3 раньше решал, они элементарные,  а вот 4-ю не смог.

2 TwisT_X
А есть еще  такие логические задачи???
Если есть выложи  по-больше  плз. !!!!!!!! 
 smile  

Автор: Shadowlord 30.4.2007, 16:06
вот решение по подробней:
решаем в целых числахsmile
3*2*2*5*n+1=m 
7k=m
1. n=1 m=61 - не подходит
2. n=2 m=121
3. n=3 m=181
4. n=4 m=241
5. n=5 m=301 -  7*43=301 вот оноsmile

Автор: vinter 30.4.2007, 18:58
ну и от меня задачка: в пещере стоят два охранника за каждым из них дверь, какой(один) вопрос нужно задать одному охраннику чтобы точно определить правильную двер. Одна дверь ведет на свободу, другая на плаху. Так же известно что один охранник всегда лжет, а другой всегда говорит правду.
и еще подзадача, обьяснить решение этой задачи в терминах матлогики smile
вот такая вот задачка

Автор: Shadowlord 30.4.2007, 19:44
Ошибся smile

Автор: VA_DOS 30.4.2007, 19:47
Цитата

MymikFin, как вы все это угадываете?!  smile 

Задача №4Сводный отряд ветеранов готовится пройтись колонной на соответствующем празднике. Построились по двое. Один остался без пары. Нехорошо. Встали по трое. Опять один - сиротинушка. По четыре и по шесть - ясно, что неровно, но ведь опять один остаётся! Тогда по пять. Тот же результат! Наваждение. Уж для самоуспокоения построились по семеро. И вышло абсолютно ровно. Сколько же людей строилось?


Остаток от деления на 5 == 1, значит общее количество ветеранов заканчивается на 1 или на 6 (то есть остаток от деления на 10).

Еще ограничение - остаток от деления на 2 == 1, значит общее количество ветеранов может заканчиваеться только на 1.

Остаток от деления на 4 == 1, значит общее количество ветеранов - 1  по модулю 10 должно быть четным.

Остаток от деления на 6 == 1, значит общее количество ветеранов - 1 по модулю 10 должно быть кратным шести.


Ряд кандидатов: 61, 121, 181, 241, 301, 361.....


К тому же - должно содержать сомножитель 7 (остаток от деления на 7 равен 0).



Условиям удовлетворяет - 301

Автор: vinter 30.4.2007, 19:48
так получается что с таким вопросом, мы не сможем точно определить ведет ли дверь на свободу..

Автор: Shadowlord 30.4.2007, 20:27
Доперsmile
Нужно задать вопрос одному из охранников вопрос
« Что ответит  другой на вопрос куда ведет дверь которую он охраняет ? »
Если ответ « на свободу » то идти в дверь которую охраняет отвечающий охранник, иначе в другую.

Пояснение : возможно 4 ситуации.
1. Вопрос задается охранник который всегда говорит правду, охраняющий дверь на свободу.
Тогда его напарник лжец охраняющий дверь на плаху, охранник скажет правду о том что лжец обманет и ответ будет « на свободу »
2. Вопрос задается лжецу, охраняющий дверь на свободу.
Тогда его напарник , охраняющий дверь на плаху, лжец обманет о том что второй скажет правду и ответ будет « на свободу »
3. Вопрос задается охранник который всегда говорит правду, охраняющий дверь на плаху.
Тогда его напарник лжец охраняющий дверь на свободу, охранник скажет правду о том что лжец обманет и ответ будет « на плаху »
4. Вопрос задается лжецу, охраняющий дверь на плаху.
Тогда его напарник , охраняющий дверь на свободу, лжец обманет о том, что рыцарь скажет правду и ответ будет « на плаху »
Осталось оформить в терминах матлогикиsmile

Автор: Akina 30.4.2007, 20:52
Цитата(TwisT_X @  29.4.2007,  15:42 Найти цитируемый пост)
Задача №4: Сводный отряд ветеранов готовится пройтись колонной на соответствующем празднике. Построились по двое. Один остался без пары. Нехорошо. Встали по трое. Опять один - сиротинушка. По четыре и по шесть - ясно, что неровно, но ведь опять один остаётся! Тогда по пять. Тот же результат! Наваждение. Уж для самоуспокоения построились по семеро. И вышло абсолютно ровно. Сколько же людей строилось? 

Если уменьшить их количество на 1, оставшееся делится на 2, 3, 4, 5, 6...
Итого их количество 60*N+1... но оно делится на 7... значит 4*N+1 тоже делится на 7... минимальное N=5... 60*N+1=301

Автор: Samotnik 1.5.2007, 02:25
Цитата(Shadowlord @  30.4.2007,  20:27 Найти цитируемый пост)
Допер

Я тоже правда тока щас!!!!

2 vinter  А еще есть?

Автор: SelenIT 1.5.2007, 05:28
Мне в своё время вот эта задачка понравилась:

Составьте самоописывающее предложение с 33 параметрами - буквами русского алфавита, то есть предложения правдиво сообщает о том, по сколько каждых букв алфавита в нем содержится. Цифровое написание использовать запрещено.

Вот один из вариантов ответа:
В этом предложении есть сорок четыре буквы "а", тридцать четыре буквы "б", сорок четыре буквы "в", одна буква "г", тридцать четыре буквы "д", двадцать семь букв "е", одна буква "е", две буквы "ж", одна буква "з", тридцать букв "и", одна буква "й", тридцать шесть букв "к", две буквы "л", шесть букв "м", девятнадцать букв "н", двадцать букв "о", три буквы "п", восемнадцать букв "р", одиннадцать букв "с", тридцать шесть букв "т", тридцать четыре буквы "у", одна буква "ф", одна буква "х", пятнадцать букв "ц", семь букв "ч", четыре буквы "ш", одна буква "щ", одна буква "ъ", восемнадцать букв "ы", двадцать одна буква "ь", две буквы "э", одна буква "ю", и три буквы "я".


По идее, тут нетривиальный алгоритм подбора нужен, да ещё разные варианты "преамбулы" предусмотреть...

Автор: Shadowlord 1.5.2007, 13:29
Цитата

Составьте самоописывающее предложение с 33 параметрами - буквами русского алфавита, то есть предложения правдиво сообщает о том, по сколько каждых букв алфавита в нем содержится. Цифровое написание использовать запрещено.

По моему решается через рекурсию

smileМожет не будем все задачи сваливать в одну тему?smile
Или нужно создать отдельную тему и назвать  к примеру "Решаем интересные задачи":)

Автор: Alabay 30.5.2007, 21:34
Цитата

Задача №4: Сводный отряд ветеранов готовится пройтись колонной на соответствующем празднике. Построились по двое. Один остался без пары. Нехорошо. Встали по трое. Опять один - сиротинушка. По четыре и по шесть - ясно, что неровно, но ведь опять один остаётся! Тогда по пять. Тот же результат! Наваждение. Уж для самоуспокоения построились по семеро. И вышло абсолютно ровно. Сколько же людей строилось?

Почему-то сразу же вбило в голову число 49. Почему оно не подходит?
Объяснить не могу, автоматом вбило.. наверное, что 7*7=49 =)

Автор: apook 1.6.2007, 14:26
Цитата

Составьте самоописывающее предложение с 33 параметрами - буквами русского алфавита, то есть предложения правдиво сообщает о том, по сколько каждых букв алфавита в нем содержится. Цифровое написание использовать запрещено.

Вот грубоватое  решение
Код

#include<conio.h>
#include<stdio.h>
#include<string.h>

#include<stdlib.h>


void print_in_word( const char *str )
{
int i;
int X=strlen(str);

//сия функция умеет обрабатывать числа не болльше 999 т.к написана за 15 минут
if( X>3 )
    return;
char in_words[ 10 ][ 3 ][ 50 ]=
{
    { "один", "десять", "сто" },
    { "два",  "двадцать", "двести" },
    { "три",  "тридцать", "триста" },
    { "четыре",  "сорок", "четыреста" },
    { "пять",  "пятьдесят", "пятьсот" },
    { "шесть",  "шестьдесят", "шестьсот" },
    { "семь",  "семдесят", "семьсот" },
    { "восемь",  "восемьдесят", "восемьсот" },
    { "девять",  "девяносто", "девятьсот" },
    },
between[ 9 ][ 50 ]=
{
    "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать",
    "шестнадцать", "семнадцать", "восемнадцать", "девятнадццать"
    };

for( i=0; i<X; i++ )
{
    if( (X-i)==2 && (str[ i ]=='1' && str[ i+1 ]!='0') )
    {   
        printf( "%s ",  between[ (str[ i+1 ]-'0')-1 ] );
        break;
        }
    else
        printf( "%s ", ( (str[ i ]-'0')>0 ) ? in_words[ (str[ i ]-'0')-1 ][ X-(i+1) ] : "" );
    }

return;
}


void main( )
{
int i, j, c, count, X;
char str[ 100 ], symb[ 100 ], numstr[ 4 ];


printf( "Введиттэ строку позаалуста: " );
scanf( "%s", str );
X=strlen( str );


symb[ 0 ]=str[ 0 ];
for( i=0, j=1; j<X; j++ )
{
    if( str[ j ]!=symb[ i ] )
    {
        ++i;
        symb[ i ]=str[ j ]; 
        }
    }
symb[ ++i ]='\0';


printf( "В строке %s \n", str );
for( i=0, count=0; i<strlen(symb); i++ )
{
    for( j=0, count=0; j<X; j++ )
    {
        if( str[ j ]==symb[ i ] )
            ++count;
        }

    printf( "символ '%c' повторяется ", symb[ i ] );
    print_in_word( itoa(count, numstr, 10) );
    printf( "раз\n" );
    getch();
    }

return;
}

Автор: pompei 13.12.2007, 05:43
Цитата(vinter @ 30.4.2007,  18:58)
ну и от меня задачка: в пещере стоят два охранника за каждым из них дверь, какой(один) вопрос нужно задать одному охраннику чтобы точно определить правильную двер. Одна дверь ведет на свободу, другая на плаху. Так же известно что один охранник всегда лжет, а другой всегда говорит правду.
и еще подзадача, обьяснить решение этой задачи в терминах матлогики smile
вот такая вот задачка

У меня другое решение есть, верней целых 4 симметричных вопроса:

"Правда ли что тот из вас, что говорит правду стоит у двери на свободу?" (правда - на свободу)
Ну и соответствующие 3 оставшихся симметричных вопроса: "правда - на плаху", "ложь - на свободу", "ложь - на плаху".

Думаю легко разобрать, куда нужно идти после ответа на эти вопросы?

Может ещё сущесмтвуют какие-нибудь решения?

Автор: Bio 26.3.2008, 15:52
Если не возражаете, хотел бы вернуться к задаче про монеты. 
Условие - аналогичное, но не известно: фальшивая монета легче или тяжелее.
На мой взгляд, найти фальшивку можно за 3 взвешивания. Кто больше (меньше)?

Автор: gambit 22.4.2008, 12:49
Цитата(Bio @  26.3.2008,  15:52 Найти цитируемый пост)
Если не возражаете, хотел бы вернуться к задаче про монеты. 
Условие - аналогичное, но не известно: фальшивая монета легче или тяжелее.
На мой взгляд, найти фальшивку можно за 3 взвешивания. Кто больше (меньше)? 

а какая разница легче или тяжелее, главное что не столько же, так что тоже за два.

Автор: OpenGL 23.4.2008, 00:04
Разница есть: например, если из 2-х одна фальшивая, то если вес известен, ее можно найти, а если нет, то нельзя.
Поэтому за 2 взвешивания в этой задаче монету можно найти, если только повезет, а иначе- только за 3.

Добавлено через 10 минут и 24 секунды
8 монет- слишком просто. Вот задача потруднее.
Есть 13 монет, из них 1 фальшивая, как это ни странно smile. Фальшивая монета другого веса(легче или тяжелее- неизвестно).
За какое минимальное число взвешиваний ее можно найти?

Автор: Fin 23.4.2008, 08:44
OpenGL, За 3 взвешивания. 

Автор: OpenGL 24.4.2008, 20:29
Верно. Вообще, на сайте braingames.ru много таких задачек.

Автор: vinnypooh 13.3.2009, 12:21
301 - это я про количестов ветеранов

Автор: hooh 18.11.2009, 06:59
Ветеранов 301 или 721 или больше

Автор: oleg_in62 13.8.2010, 14:16
301

Автор: Pawl 5.1.2014, 11:08
А вот графическая головоломка:user posted image
Надо все кружочки соединить 3-мя прямыми линиями, не отрывая ручки от бумаги. Еще присоединю файлик с кружочками, а то как-то они не отображаются...

Автор: Akina 5.1.2014, 17:58
Pawl, да делать нефиг. Это же не точки... Фактически рисуется дли-и-инная буква "И".

Автор: Pawl 5.1.2014, 18:27
Цитата(Akina @  5.1.2014,  17:58 Найти цитируемый пост)
Pawl, да делать нефиг.

Быстро догадался? Или знал? smile 

Автор: Akina 5.1.2014, 22:08
Pawl, не знал, но догадался сразу.
Вот задачка, сыгравшая роль катализатора: через шахматную доску провести 7 прямых так, чтобы каждая клетка поля была рассечена на части хотя бы одной прямой.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)