Отримання знань

дистанційна підтримка освіти школярів


Тут ви можете виконати завдання чи задати питання по змiсту цього уроку.

Михальов Володимир (StarRover) 2013-10-04 12:57:07
Задача Djoz1
Під час громадянської війни 1861-1862 р.р між Північними та Південними Американськими Штатами невеликий загін "північних" під командою генерала Джозефуса потрапив в оточення. Було прийняте рішення прориватися поодинці. Але хто понесе прапор? За командую Джозефуса він і солдати стали в коло. Кожен отримав свій номер в порядку обходу кола. За командою кожен з солдатів "викинув" пальці. В сумі отримали число К. Рахувати завжди починали з солдата з найменшим номером в напрямку збільшення номерів по колу, відраховували К-го, він виходив з кола. Так робили доти, поки не залишився один солдат, який виніс прапор, а ми дізналися про цю задачу :-)
Дано N солдатів у колі і число k. Все відбувається за легендою. Який солдат понесе правпор?

Технічні умови. Програма читає з клавіатури 2 натуральні числа N s К через пропуск. Кожне не більше 1000. Програма виводить на екран одне число - шукану величину.
Приклад

Введення: 7 45
Виведення: 5
-----------------------------------------------------------------------
{Djoz1}
const
max=10000;
var
n,k,i,del:longint;
a:array[1..max] of longint;
begin
Read(n,k);
for i:=1 to n do a[i]:=i;
while n>0 do begin
del:=(k mod n);
if (del<>0) then
for i:=del to n-1 do a[i]:=a[i+1];
n:=n-1;
end;
WriteLn(a[1]);
end.
Михальов Володимир (StarRover) 2013-10-04 15:10:12
Задача Djoz2
Під час громадянської війни 1861-1862 р.р між Північними та Південними Американськими Штатами невеликий загін "північних" під командою генерала Джозефуса потрапив в оточення. Було прийняте рішення прориватися поодинці. Але хто понесе прапор? За командую Джозефуса він і солдати стали в коло. Кожен отримав свій номер в порядку обходу кола. За командою кожен з солдатів "викинув" пальці. В сумі отримали число К. Рахувати почали з солдата з номером 1 в напрямку збільшення номерів по колу, відраховували К-го, він вийшов з кола. Так робили доти, поки не залишився один солдат, який виніс прапор, а ми дізналися про цю задачу :-)
Дано N солдатів у колі і число k. Все відбувається за легендою. Який солдат понесе правпор?

Технічні умови. Програма читає з клавіатури 2 натуральні числа N і К через пропуск. Кожне не більше 1000. Програма виводить на екран одне число - шукану величину.
Приклад

Введення: 6 7
Виведення: 5
-------------------------------
{Djoz2}
const
max=1000;
var
n,k,i,del:longint;
a:array[1..max] of longint;
begin
Read(n,k);
for i:=1 to n do a[i]:=i;
del:=1;
while n>0 do begin
del:=((k mod n)+del-1) mod n;
if (del<>0)
then for i:=del to n-1 do a[i]:=a[i+1]
else del:=1;
n:=n-1;
end;
WriteLn(a[1]);
end.

Повернутися до уроку

Повернутися до перелiку уроків курсу

В системі: гості - (1); користувачі - (0)