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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Konyahinzhenya
-23 / 1 / 0
Регистрация: 20.09.2011
Сообщений: 32
#1

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

24.11.2011, 14:46. Просмотров 426. Ответов 0
Метки нет (Все метки)

Задание :
Группа людей стоит в кругу и каждый выбирает целое положительное число. Затем выбираются одно из их имен и положительное число 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++
Вот в примере елем в список добавл в конец, а как сдел чтобы они добавл в начало ? void List_2::Insert_end_list_2(int data) { Plist...

Класс: двунаправленный список - C++
Здравствуйте! Есть задание: написать двунаправленный список в виде класса, для хранения в нем системных сообщений. Вот, что у...

Двунаправленный нециклический список - C++
Здравствуйте! Нужно написать программу, обеспечивающую работу с двунаправленным нециклическим списком: добавление/удаление элементов в...

Классы. Двунаправленный список - C++
Проблема в ф-ции deleteByValue(int value0) , она удаляет не только один эл-т, но вдобавок ещё все предыдущие...... По контрольным...

Линейный двунаправленный список - C++
Есть такое задание: Линейный двунаправленный список, упорядоченный по возрастанию. Я реализовал Линейный однонаправленный список,...

Динамический двунаправленный список - C++
Помогите! Нужно создать Динамический двунаправленный список и выполнить операцию: Добавление элемента в середину списка после...

Создать двунаправленный список - C++
Всем привет! помогите пж сохдать двунаправленный список с числами в диапазоне -50 +50. У меня есть простой пример однонаправленной...

Двунаправленный линейный список - C++
Нужно сделать из двунаправленного линейного списка, циклический и найти ср. аримфетическое. Мои попытки сделать двунаправленный циклический...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru