4 / 4 / 5
Регистрация: 01.03.2016
Сообщений: 72
1

Задача Иосифа Флавия с использованием списков

20.02.2017, 01:11. Показов 1542. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Народ, добрый день, вот код программы:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
program legend;
uses crt;
type
  pItem = ^tItem;
  tItem = record
    data: byte;
    next: pItem;
  end;
var
  n,t,tmpn,i,count: integer;
  s,tmp: pItem;
 
 
  procedure push(var p:pItem; c:integer);// процедура добавляет новый элемент к списку 
    var
      i:pItem;
    begin
      new(i);
      i^.data:=c;
      i^.next:=p;
      p:=i;
    end;
 
 
 
begin
  clrscr;
  write('Enter number of soldires: ');
  readln(n);
  write('T: ');// через сколько солдат убивать 
  readln(t);
  //create list
  new(s);
  i:=1;
  s^.next:=nil;
  s^.data:=n;
  tmp:=s;
  tmpn:=n;
  while (i < tmpn) do
    begin
      dec(tmpn);
      push(s,tmpn);
//      writeln(s^.data);
    end;
  tmp^.next:=s;
 
  while ( s^.next <>  s) do
    begin
      for count:=1 to t do
        s:=s^.next;
        tmp:=s^.next;
        s^.next:=s^.next^.next;
        dispose(tmp);
    end;
 
  writeln(s^.data);
 
 
  readkey;
end.

Не могу найти ошибку, работает ед. пример, если 10 солдат с шагом 3, в остальных случаях чепуха, кто может, найдите ошибочку.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.02.2017, 01:11
Ответы с готовыми решениями:

Задача Иосифа Флавия
Всем привет. Помогите пожалуйста с этой задачей. Никак допедрить не могу. вот код: ...

Задача Иосифа Флавия
Помогите написать общую программу по этой задаче Задача Иосифа Флавия или считалка Джозефуса —...

Задача Иосифа Флавия
100 человек стоят по кругу, им присвоены номера от 1 до 100. Они начинают считаться и каждый 19-й...

Задача Иосифа Флавия
(Считалка) n детей размещаются по кругу. Начиная отсчет от первого, исключают каждого k-го,...

3
Модератор
Эксперт по электронике
8484 / 4342 / 1643
Регистрация: 01.02.2015
Сообщений: 13,484
Записей в блоге: 8
20.02.2017, 21:52 2
При удалении элемента (51-53) не копируете поле data. Скорее всего, из-за неправильного копирования содержимого следующего звена в списке (копируете только ссылку).
0
4 / 4 / 5
Регистрация: 01.03.2016
Сообщений: 72
20.02.2017, 23:23  [ТС] 3
Так а как иначе?
Я же не могу удалить поле data, это тип Byte.
Я могу только ссылку на элемент списка удалить, тем самым одбросив и поле data, разве не так?
0
Модератор
Эксперт по электронике
8484 / 4342 / 1643
Регистрация: 01.02.2015
Сообщений: 13,484
Записей в блоге: 8
21.02.2017, 07:23 4
Выдернул из FAQ
Если следует удалить элемент на который указывается ссылка q, то следует в начале присвоить элементу q^ значение следующего за ним элемента, а затем этот элемент удалить.
Pascal
1
2
3
4
5
6
7
8
9
10
{удаление элемента q^}
Procedure Delete(Var q: point);
Var r: point;
Begin
  r:=q^.next;
  q^:=r^;
  r^.Next:=nil;
  Dispose(r);
  r:=nil;
End;
Видите разницу?
Но для удаления предпоследнего этот способ не годится. Нужно будет иначе удалять.
0
21.02.2017, 07:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.02.2017, 07:23
Помогаю со студенческими работами здесь

Задача Иосифа Флавия
Решил попробовать сделать,через словарь. Затруднение в том,как убирать,каждый k-ый. Вокруг...

Задача Иосифа Флавия
Хмм, а что вы думаете о нем и его задаче? Очень интересно Ваше мнение т.к. пишу по этой теме работу

Задача иосифа флавия
N человек играют в следующую игру: стоя в кругу они начинают считалку. Счёт идёт до числа M....

Задача Иосифа Флавия
Даны натуральные n, m. Предполагается, что n человек встают в круг и получают номера, считая против...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru