С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Другой рандом - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Написать функцию, находящую сумму цифр целого числа http://www.cyberforum.ru/cpp-beginners/thread709484.html
Написать функцию SumDigit(N), находящую сумму цифр целого числа N (N - входной параметр). При вводе N реализовать проверку на корректность исходных данных (N > 0).
C++ Оператор цикла. Вывести таблицу степеней двойки от нулевой до десятой Задание выполните, используя все три оператора цикла (т.е. вывод результатов на экран у Вас будет осуществляться трижды с коментарием о названии оператора цикла). Написать программу, которая... http://www.cyberforum.ru/cpp-beginners/thread709481.html
C++ Динамическое программирование. Определить оптимальную загрузку самолетов с грузоподъёмностью от G до 1,3G
Помогите решить задачу на динамич. программирование: Самолет имеет максимальную грузоподъемность G(m). Предметы, загружаемые в самолет, имеют различные веса и стоимости: wi(m), Сi (руб.)...
C++ Объединить массивы в один, включив второй между пятым и шестым элементами
Ввести с клавиатуры два одномерных массива содержащих 10 и 5 элементов. Объединить их в один массив, включив второй между пятым и шестым элементами.На экран вывести исходные массивы сформированные в...
C++ Запрет ввода символов в консоли http://www.cyberforum.ru/cpp-beginners/thread709416.html
моя консольная программа имеет очень много вводов от пользователя, через контекстное меню (нажмите 1 для того, 2 для другого) чтоб не делать и не зацикливать каждый ввод в коде, возможно ли...
C++ В папке К2 создайте файл t3.txt, в который перепишите вначале текст из файла t1.txt, а затем из t2.txt Программным путем: 1. В папке С:\temp создайте папки К1 и К2. 2. В папке К1: a) создайте файл t1.txt, в который запишите следующий текст : Иванов Иван Иванович, 1965 года рождения, место... подробнее

Показать сообщение отдельно
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
26.11.2012, 16:50  [ТС]
Цитата Сообщение от 0x10 Посмотреть сообщение
taras atavin, а можно описание решения русским языком, чтобы не вчитываться в код?
Одни и те же элементы одновременено принадлежат массиву и двусвязному циклическому списку, в памяти располагаются последовательно и без промежутков, как в массиве, но соединены указателями, снабжены флагами, при каждой выборке индекса элемента проверяется, выдавался ли этот индекс, если выдавался, то выдаётся индекс следующего элемента списка, для чего по индексу вычисляется указатель, потом по этому указателю читается указатель на следующий элемент списка, а по этому указателю снова вычисляется индекс, кроме того, при всякой выборке индекса он удаляется из списка, но не из массива. Немного прогнал.
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
class TItem
{
 ...
 public:
  bool Flag;
  TItem *Next;
  TItem *Previus;
};
TItem Array[60];
void Init (TItem *Array, unsigned int N) // Вызывается перед первым доступом к массиву
{
 TItem *p;
 Array->Previus=Array+N-1;
 Array->Previus->Next=Array;
 for (p=Array+N-2; p>Array; --p)
 {
  p->Next=p+1;
  p->Previus=p-1;
 }
 for (p=Array+N-1; p>=Array; --p)
 {
  p->Flag=false;
 }
}
unsigned int GetIndex(TItem *Array, unsigned int N)
{
 unsigned int Index;
 TItem *p;
 Index=rnd%N;
 p=Array+Index;
 while (p->Flag)
 {
  p=p->Next;
  Index=p-Array;
 }
 p->Previus->Next=p->Next;
 p->Next->Previus=p->Previus;
 p->Flag=true;
 return Index;
}
Добавлено через 1 минуту
N не может быть большим.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.