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

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

  


Задача Иосифа Флавия

Program JosivFlaviye;
Uses CRT;
Const n = 8;
Type tp = ^bt;
     bt = record
          inf: Byte;
          lnk: tp;
          off: Boolean;
          End;
Var t, top: tp;
    f: tp;
    i: Byte;
    k: Byte;
    o: Byte;

Procedure Print;
Begin
f := t;
For i := 1 to n do
    Begin
    Write(f^.inf,' ');
    f := f^.lnk;
    End;
End;

Procedure Schet(s: Byte);
Begin
t := top;
For o := 1 to n - 1 do
    Begin
    i := 1;
    Repeat
    If (t^.off = False) then inc(i);
    t := t^.lnk;
    Until (i = k) and (t^.off = False);
    Writeln('Вычеркнули ',t^.inf);
    t^.off := True;
    End;
End;

Begin
ClrScr;
top := nil;
For i := n downto 1 do
    Begin
    t := New(tp);
    t^.inf := i;
    t^.lnk := top;
    t^.off := False;
    top := t;
    End;
f := t;
For i := 1 to n-1 do
    Begin
    f := f^.lnk;
    End;
f^.lnk := t;
Print;
Write(#13#10,'До скольки считать: '); Readln(k);
Schet(k);
While (t^.off = True) do
      t := t^.lnk;
Writeln('Остался ',t^.inf);
ReadKey;
End.


Источник:

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

Всего комментариев: 9
9 to.lya  
0
Є числовий проміжок [N;M]. Треба на цьому проміжку знайти найменше число, яке саме багате на дільники.

Вхідні дані. Перший рядок містить кількість тестових пар. У наступних рядках знаходяться цілі числа N i M ( 1 <= N <= M <= 1000000000, 0 <= M – N <= 10000), що задають числовий проміжок.

Вихідні дані. Для кожного проміжку в одному рядку вивести число, що має найбільшу кількість дільників та їх кількість.
ExamplesInput Output
3
1 10
1000 1000
999999900 1000000000

6 4
1000 16
999999924 192


8 to.lya  
0
Допоможіть!!!!!!!!!!!!!!!

Є числовий проміжок [N;M]. Треба на цьому проміжку знайти найменше число, яке саме багате на дільники.

Вхідні дані. Перший рядок містить кількість тестових пар. У наступних рядках знаходяться цілі числа N i M ( 1 <= N <= M <= 1000000000, 0 <= M – N <= 10000), що задають числовий проміжок.

Вихідні дані. Для кожного проміжку в одному рядку вивести число, що має найбільшу кількість дільників та їх кількість.
ExamplesInput Output
3
1 10
1000 1000
999999900 1000000000 6 4
1000 16
999999924 192


7 DemonStown  
0
плиззз

6 DemonStown  
0
парни помогите решить задачу дано натуральное число.Определить можно ли представить его в виде произведения 2 простых чисел.задача по теме цикл по условию. помогите

5 Alexander  
0
Vitaliy, обсуждение задачи есть на форуме:
http://pascal-for-all.ucoz.ru/forum/10-7-1
Правда желательно код на паскаль переписать, хотя для меня тоже си родной. Я свой вариант тоже напишу ка-нибудь, варианты из задачника, конечно, очень слабые.

4 nevidomy  
0
смотрю не актуально ну да ничего)))

я кстати недавно решал эту задачу... и когда мое решение приняло вид моделирование как у вас - то мне это конечноже не понравилось и я решил ее так что у меня на N=1000000000 и K=100000 уходит 0.064 секи)))

гы)) tongue + кода реально меньше)))

а вот рабочий код:
int brut(int n,int k)
{
int r=0;
FOR(i,2,n+1)
{
r=(r+(k%i))%i;
}
return r;
}

int rec(int n,int k)
{
if (n<=k) return brut(n,k);
int ost=n%k;
int r=rec(n-n/k,k);
r=(r+(n-n/k)-ost)%(n-(n/k));
return r+r/(k-1);
}

int solve(int N,int K)
{
if (K==1) return N-1;
return rec(N,K);
}

ответ - solve(N,K) (нумерация с нуля)


3 Pavel  
0
Вот еще один вариант решения, на сей раз с использованием ссылочных типов данных. Различие от решеннея Дмитрия: в записи нет третьего поля типа boolean. Следовательно, другой принцип решения с использованием все того же закольцованного списка. smile smile smile

program Iosig_Flavii_ver2;
uses crt;
const
n = 10;
type
tp = ^sp;
sp = record
inf: integer;
link: tp;
end;
var
top, k, d: tp;
i, j, q: byte;

begin
clrscr;
writeln('Vvedite kol-vo hodov:');
readln(q);

top := nil; {golovu spiska na ssilaem na nil dlya initializacii spiska}

for i := n downto 1 do {sozdaem spisok}
begin
getmem(k, sizeOf(tp));
k^.inf := i;
k^.link := top;
top := k;
end;

d := top; {poluchili ssilku na verhnii element (inf = 1)}
while d <> nil do
begin
k := d;
d := k^.link;
end;

d := k; {poluchili addres pervogo elementa}
d^.link := top; {zakol'cevali spisok}
k := top; {poluchaem ssilku na pervii element}

j := 1;

while j < n do
begin
for i := 1 to q - 2 do {idem po ssilkam}
k := k^.link;
{u} {udalyaem iz spiska element, na kot. ostanovilsya schet}
d := k^.link;
k^.link := d^.link;
freemem(d, sizeOf(d));
{/u}
k := k^.link; {poluchaem ssilku na sled. el., s kot. nachnem schet}
inc(j); {chtob ne uiti v beskonechnii cikl}
end;

writeln('Ostalsya el. #', k^.inf, '.');
readkey;
end.

Вот если хотите, то можно обойтись без переменной top: tp. biggrin biggrin


2 Pavel  
0
А вот вариант решения с одномерным массивом! Дим, тебе респект, но в институте требуют два способа! tongue tongue
Мы молодцы, однако! cool cool

program Iosif_Flavii_ver1;
uses crt;
const
n = 10; {кол-во участников считалочки без считающего}
var
a: array[1..n] of byte;
i, k, d,
fst, h, s: byte;

{Описание переменных:
fst - с какого начинаем считать;
k - до скольеи считать;
h - считате сколько прошло ходов h = 1..n-1;
s - номер пустого элемента, куда ставим 1;
1 - значит a[i] занято (участник с этим номером выбыл);
d - дополнительная переменная;
}

procedure OutArr; {vivod massiva}
var j: byte;
begin
for j := 1 to n do
if a[j] = 0 then write(j, ' ')
else write(' ');
writeln;
end;

begin
clrscr;
writeln('Vvedite: ');
readln(k);

h := 1;
fst := 1;
while h < n do
begin
d := 1;
i := fst;
while d <= k do {zdes' propuskaem vibivshih igrokov}
begin
if a[i] <> 1 then
begin
inc(d);
s := i;
end;
inc(i);
if i > n then i := i - n;
end;
a[s] := 1;
fst := i;
if fst > n then fst := fst - n;
outArr;
readkey;
inc(h);
end;

for i := 1 to n do {vivod iznachal'nogo nomera poslednego igroka}
if a[i] = 0 then
begin
writeln('Nomer ostavshegosya: ', i);
break;
end;
readkey;
end.

Пользуйтесь на здоровье! biggrin biggrin biggrin


1 Seqular  
0
Че-то я недоглядел ;)) Малёха... Параметр в процедуре Schet можно вообще убрать. wink
Procedure Schet; - вот так..
И вызывать ее без параметра. Ибо он глобален wink Ну или переменную k локализовать в процедуре "счета"

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