Вторник, 07.01.2025
Pascal 4 All
Меню сайта
Категории каталога
Задачки циклы и условия [27]
Простые задачки, циклы, условия.
Наш опрос
А вы знали, что кликнув на обьявление в правом блоке раз в день Вы поможете сайту?
Всего ответов: 332

Главная » Статьи » Простые » Задачки циклы и условия

  


Имеется 3^n монет, найти фальшивую за n взвешиваний

Program Coins2;
Uses CRT;
Const
      Nums: Array[1..9] of Integer = (3, 9, 27, 81, 243, 729, 2187, 6561, 19683);
      N = 4;
Var a: Array[1..20000] of Byte;
    Max, i: Integer;
    c: Char;
    Count: Byte;

Procedure Rules;
Begin
Writeln(#13#10,'[0] - Если чаши весов остались в равновесии');
Writeln('[1] - Если левая чаша весов перевесила правую');
Writeln('[2] - Если правая чаша весов перевесила левую');
Writeln('!!! Учтите, что ФАЛЬШИВАЯ монета ТЯЖЕЛЕЕ остальных !!!');
End;

Procedure Find(min, max: Integer);
Var leng, part: Integer;
Begin
leng := max - min; {Длина ряда}
If (Leng < 3) then
   Begin
   Writeln('Последнее взвешивание!');
   Writeln('Слева монета ',min,', Справа монета ',max);
   Repeat
   Writeln('Какая чаша тяжелее? Введите число 0|1|2');
   Readln(c);
   Until (c='1') or (c='2') or (c='0');
   Write('Ну тут очевидно, что фальшивка - ');
   Case c of
   '1': Writeln(min);
   '0': Writeln(min+1);
   '2': Writeln(max);
   End;
   Writeln('Вот и сказочке конец. Кто не понял - F1');
   ReadKey;
   Halt;
   End;

part := leng div 3; {Одна третья часть}
Inc(Count);
ClrScr;
Writeln('Взвешивание номер ',Count);
Writeln('На левой чаше весов лежат монеты от ',min,' до ',min + part);
Writeln('На правой чаше весов лежат монеты от ',min+part+1,' до ',max - part-1);
Repeat
Writeln(#13#10,'Какая чаша тяжелее? Введите число 0|1|2');
Rules;
Readln(c);
Until (c='1') or (c='2') or (c='0');
Case c of
'0': Begin
     Writeln('Ага! Равновесие. Значит фальшивая монета где-то среди ',max-part+1,' - ',max,' монет');
     ReadKey;
     Find(max-part+1,max);
     End;
'1': Begin
     Writeln('Опаньки! Левая тяжелее. Значит фальшивая монета где-то среди ',min,' - ',min+part,' монет');
     ReadKey;
     Find(min, min+part);
     End;
'2': Begin
     Writeln('Ух ты! Правая тяжелее. Значит фальшивая монета где-то среди ',min+part+1,' - ',max - part-1,' монет');
     ReadKey;
     Find(min+part+1, max-part-1);
     End;
End;
End;

Begin
ClrScr;
Writeln('Загадайте монетку от 1 до ',Nums[N]); ReadKey;
Writeln('Загадали?'); ReadKey;
Writeln('Лучше запишите, а то я вас знаю....'); Readkey;
Writeln('Приступаем...'); ReadKey;
Find(1, Nums[N]);
End.


Источник:

Категория: Задачки циклы и условия | Добавил: Seqular (28.10.2007) | Автор: Дмитрий
Просмотров: 1693 | Комментарии: 2 | Рейтинг: 0.0/0 |

Всего комментариев: 2
2 Seqular  
0
Девчата, пытающиеся переделать эту программу под Delphi - удачи!

1 Seqular  
0
Эм... Вроде фурычет. Есть подозрение, что в условии нужно ставить "<= 3", вместо "< 3". Хотя не знаю.. Пока все точно работало smile

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Поиск
Друзья сайта
Статистика
Copyright MyCorp © 2025
Используются технологии uCoz
style=