Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2009, 16:53   #1
J_o_h_n_
Пользователь
 
Регистрация: 07.04.2009
Сообщений: 16
Радость Помогите с задачкой на массив

Пусть п людей встают в круг и получают номера 1, 2, ..., n, считая по часовой стрелке. Затем, начиная с первого, также по часовой стрелке отсчитывается т-й человек. (Поскольку люди стоят по кругу, то при счёте за п-м следует первый). Этот т-й выходит из круга, после чего, начиная со следующего, снова отсчитывается т-й человек, и так до тех пор, пока из всего круга не останется один человек. По заданным натуральным числам п и m определить:
а) номер оставшегося в кругу человека;
б) с какого номера нужно начать счёт, чтобы последним в кругу остался человек с заданным номером k?
J_o_h_n_ вне форума Ответить с цитированием
Старый 07.04.2009, 19:41   #2
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

наверное можно через динамику, но чет лень думать). Сделал так:
Код:
type elem=record
     next:^elem;
     value:integer;
end;

var first,CurElem:^elem;
    Count,T:integer;

procedure CreateElements(n:integer);
var tempElem:^elem;
    i:integer;
begin
 new(first);
 first^.value:=1;
 CurElem:=first;
 for i:=2 to n do
  begin
   new(tempElem);
   tempElem^.value:=i;
   CurElem^.next:=tempElem;
   CurElem:=tempElem;
  end;
 CurElem^.next:=first;
 new(first);
 first^.next:=CurElem^.next;
end;

procedure step(n:integer);
var i:integer;
begin
 for i:=1 to n do
  CurElem:=CurElem^.next;
end;

procedure DeleteNext;
begin
 CurElem^.next:=CurElem^.next^.next;
 dec(Count);
end;

begin
 readln(Count,T);
 CreateElements(Count);
 while Count>1 do
  begin
   step(T-1);
   DeleteNext;
  end;
 writeln(CurElem^.next^.value);
end.
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 07.04.2009, 20:36   #3
J_o_h_n_
Пользователь
 
Регистрация: 07.04.2009
Сообщений: 16
По умолчанию

друг не то получается тут записи а мне то нужен массив
J_o_h_n_ вне форума Ответить с цитированием
Старый 07.04.2009, 20:38   #4
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

для б) аналогично. просто разину нужно добавить/отнять
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 07.04.2009, 20:39   #5
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

мдэ...... можно и массив, только это не рационально получится(((((
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 07.04.2009, 20:53   #6
J_o_h_n_
Пользователь
 
Регистрация: 07.04.2009
Сообщений: 16
По умолчанию

я вот А сделал а Б немогу




uses crt;
var
a,b:array[1..100] of integer;
g,pred,tek,n,i:integer;
begin
clrscr;
write('‚ўҐ¤ЁвҐ Є®«ЁзҐбвў® н«Ґ¬Ґ*в®ў => ');
read(n);
write('“Ўа вм Є ¦¤л© н«Ґ¬Ґ*в Ї®Є *Ґ ®бв *Ґвбп ®¤Ё*');
gotoxy(15,2);
read(g);
randomize;
for i:=1 to n do
begin
a[i]:=random(199)-99;
write(a[i]:3);
b[i]:=a[i];
end;
writeln;
for i:=1 to n-1 do
a[i]:=i+1;
a[n]:=1;
tek:=1;
while a[tek] <> tek do
begin
for i:=1 to g-1 do
begin
pred:=tek;
tek:=a[tek];
end;
a[pred]:=a[tek];
tek:=a[tek];
end;
writeln('*®¬Ґа ®б⠢襣®бп н«Ґ¬Ґ*в Н> ',a[tek]:2,' Ё ҐЈ® §* зҐ*ЁҐ => ',b[tek]:2);
readkey;
end.
J_o_h_n_ вне форума Ответить с цитированием
Старый 07.04.2009, 21:03   #7
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

Код:
var a:array[1..32000] of boolean;
    count,T,n,i,q,k,x:integer;
begin
 readln(count,T,k);
 n:=count;
 q:=0;
 i:=0;
 while count>1 do
  begin
   inc(i);
   if i=n+1 then i:=1;
   if not a[i] then inc(q);
   if q=T then
    begin
     dec(count);
     a[i]:=true;
     q:=0;
    end;
  end;
 for i:=1 to n do
  if not a[i] then
   begin
    x:=i;
    break;
   end;
 writeln('a) ',x);
 x:=k-x;
 if x<0 then x:=n+x+1
 else inc(x);
 writeln('b) ',x);
 readln;
end.
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 07.04.2009, 21:34   #8
J_o_h_n_
Пользователь
 
Регистрация: 07.04.2009
Сообщений: 16
По умолчанию

всё кул работает спс огромное!!
J_o_h_n_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с задачкой Ser Паскаль, Turbo Pascal, PascalABC.NET 0 30.03.2009 22:49
Помогите с задачкой Jackiro Паскаль, Turbo Pascal, PascalABC.NET 2 22.12.2008 08:06
Помогите с задачкой((( Паскалька^^ Паскаль, Turbo Pascal, PascalABC.NET 0 19.12.2008 19:28
Помогите с задачкой одномерный массив Antowka Паскаль, Turbo Pascal, PascalABC.NET 3 12.11.2008 23:04
Помогите с задачкой Saniok Помощь студентам 4 29.09.2007 20:34