Поиск фальшивой монеты - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Имеется 11 монет. Золотые все. Николаевские червонцы. Среди них одна фальшивая, позолоченная. А внутри свинец. Из химии известно, что свинец легче золота. Есть аптекарские весы, точные. С двумя чашками. Программа определяет, какое минимальное число взвешиваний необходимо для определения фальшивой монеты. К тому же она указывает номер фальшивой монеты, полученный путем взвешиваний. Указание: использовать массив из 11 элементов для хранения весов монет. Вес фальшивой монеты располагать в массиве произвольно.

Решение задачи: «Поиск фальшивой монеты»

textual
Листинг программы
  1. {$mode objfpc}
  2. const n = 11;
  3. type ar=array[1..n] of integer;
  4. var
  5.   a:ar;
  6.   i,j,k,p:integer;
  7. function s(t:ar;ts,te:integer):integer;
  8. begin
  9.   Result:=0;
  10.   for ts:=ts to te do Result:=Result+t[ts];
  11. end;
  12. begin
  13.   randomize;
  14.   for i:=1 to n do a[i]:=1;
  15.   a[random(n)+1]:=0;
  16.   for i:=1 to n do write(i,':',a[i],'  ');writeln;
  17.   i:=1;j:=n;p:=0;
  18.   repeat
  19.     k:=i+(j-i) div 2;
  20.     p:=p+1;
  21.     if j-i=1 then begin
  22.       if a[i]<a[j] then begin k:=i;break;end else begin k:=j;break;end;
  23.     end;
  24.     if s(a,i,k-1)=s(a,k,j-1) then begin k:=j;break;end;
  25.     if s(a,i,k-1)<s(a,k,j-1) then j:=k-1 else begin i:=k;j:=j-1;end;
  26.   until false;
  27.   writeln('взвешиваний',p:3,' номер монеты',k:3);
  28. end.

Объяснение кода листинга программы

  1. Объявлены константы и переменные:
    • n = 11 (количество монет)
    • ar = array[1..n] of integer (тип массива для хранения количества монет)
    • i, j, k, p = integer (переменные для циклов)
    • a[i] = 1 (изначально все монеты считаются настоящими)
    • a[random(n)+1] = 0 (одна монета выбирается как фальшивая)
    • i = 1, j = n (переменные для цикла по монетам)
    • p = 0 (переменная для подсчета количества весов)
  2. Выполняется функция s(t; ts, te): integer
    • Результат функции равен сумме элементов массива t с ts до te
  3. Выполняется цикл по монетам:
    • Для каждой монеты выводится ее номер и количество
  4. Начинается поиск фальшивой монеты с помощью вложенных циклов:
    • Переменные i и j используются для определения текущего диапазона для сравнения
    • Переменная p используется для подсчета количества весов
  5. В каждой итерации находится серединная монета k
    • Если разница между i и j равна 1, то сравниваются значения a[i] и a[j]
    • Если значения равны, то фальшивая монета находится в диапазоне от i до j-1
    • Если a[i] меньше a[j], то фальшивая монета находится в диапазоне от i+1 до j-1
    • Если a[i] больше или равно a[j], то фальшивая монета находится в диапазоне от i до j-2
    • Если a[i] меньше a[j] и a[i+1] меньше a[j-1], то фальшивая монета находится в диапазоне от i+1 до j-1
    • Если a[i] меньше a[j] и a[i+1] больше или равно a[j-1], то фальшивая монета находится в диапазоне от i до j-2
    • Если a[i] больше или равно a[j] и a[i+1] меньше a[j-1], то фальшивая монета находится в диапазоне от i+1 до j-1
    • Если a[i] больше или равно a[j] и a[i+1] больше или равно a[j-1], то фальшивая монета находится в диапазоне от i до j-2
  6. После нахождения фальшивой монеты выводится сообщение с номером этой монеты и количеством весов.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы