Форум программистов, компьютерный форум CyberForum.ru

Двунаправленный список - C++

Восстановить пароль Регистрация
 
Konyahinzhenya
-23 / 1 / 0
Регистрация: 20.09.2011
Сообщений: 32
24.11.2011, 14:46     Двунаправленный список #1
Задание :
Группа людей стоит в кругу и каждый выбирает целое положительное число. Затем выбираются одно из их имен и положительное число n. Производится счет по часовой стрелке, начиная с человека с выбранным именем. При этом n-й человек исключается из круга. Выбранное этим человеком число используется для продолжения счета. Эти действия повторяются до тех пор, пока из всего круга остается только один человек. Определите порядок удаления людей из круга и имя оставшегося человека.


Я сделал, что удаляется всегда m-ый человек. Помогите доделать программу , что бы она была как по заданию...(тоесть что бы каждый человек загадывал число и именно на это число после его выбывания продолжался счет)
C++
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include <iostream>
using namespace std;
/*struct Titem
    {
    int n;
    Titem *next,*prev; // следующий, предыдущий
    } *first,*s,*p;    
*/
class Titem
{
  public:
         int n;
         Titem *next,*prev;
}*first,*s,*p;
 
 
int n,m;
 
void add_item(int v)     // функция добавления порядкового номера участника
    {
    Titem *p;  
    if (s==NULL && first==NULL)
        {
            s=new Titem;
            s->n = v; 
            s->next = NULL; 
            s->prev = NULL; 
            first=s;
        }
 
    else
        {
            p = new Titem;
            p->n = v;
            p->next=NULL;
            p->prev=s; 
            s->next=p; 
            s=p;
        }
    }
 
 main ()
    {
    int i;
    cout << "\nvvedite chislo  n ( chislo chelovek) ";
    cin  >> n;
 
    cout << "\nvvedite chislo  m ( vibirite cheloveka) ";
    cin  >> m;
 
    for (i=0; i<n; i++)    //zapuskaem function add_item
            add_item(i+1);
    
      s->next=first;         //zamukaem spisok
    first->prev=s;
 
    p=first; 
    for(i=0; i<n; i++)
        {
            cout << p->n << "  " ;  //vuvodim ishodnuy spsisok
            p=p->next;
        }
    cout << endl;
 
 
    s=first;
    while(n>1)               //Из списка с порядковыми номерами участников удаляем m-ый
                            //по счёту столько   раз, пока не останется один участник
                            //(после удаления    участника считать начинаем со следующего после удалённого)
        {
        p=s;
            for(i=1; i<m; i++)
                p=p->next;
            p->next->prev=p->prev; //Перед удалением m-ого элемента списка выстраивается свзь между предыдущим 
            p->prev->next=p->next;  //и следующим элементами списка
            s=p->next;
            delete p;
            n--;
        }
 
 
    cout << "nomer ostavsh cheloveka   " << s->n << endl;         //nomer ostavshejgosya elementa
 
    system("PAUSE");
    return 0;
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2011, 14:46     Двунаправленный список
Посмотрите здесь:

C++ двунаправленный список
Двунаправленный список C++
Двунаправленный список C++
C++ Двунаправленный список...
C++ Двунаправленный список!
Двунаправленный список C++
C++ двунаправленный список.

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 08:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru