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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2008, 16:51   #1
Sota
Let's keep talking
Форумчанин Подтвердите свой е-майл
 
Аватар для Sota
 
Регистрация: 02.07.2007
Сообщений: 217
Сообщение Просто алгоритм:)

Всем доброго времени суток! Вообщем у меня тут проблемы. Решил написать прогу, которая генерирует целое число в диапозоне 1-100, причём 100 раз и без повторов. Я сделал такой алгоритм, но он у меня грамоздским получился(основан на цикле for). Поэтому хочу попросить, может кто напишет пример такого приложеия, но чтоб он был очень компактный...))
заранее спасибо.
Лучше С++, чем ++С...
Sota вне форума Ответить с цитированием
Старый 09.02.2008, 17:43   #2
<vlad>
Пользователь
 
Аватар для <vlad>
 
Регистрация: 27.01.2008
Сообщений: 29
По умолчанию

Вот вам процедура, которая генерирует псевдослучайные числа до 100, а там уже разберитесь, чтоб не было повторов

Код:
#include <stdlib.h>
#include <time.h>

int getRandom()
{
	long nStartValue = time(NULL);
   srand(nStartValue);
   return rand() % 100;
}
<vlad> вне форума Ответить с цитированием
Старый 09.02.2008, 18:00   #3
Sota
Let's keep talking
Форумчанин Подтвердите свой е-майл
 
Аватар для Sota
 
Регистрация: 02.07.2007
Сообщений: 217
По умолчанию

А как организовать проверку(способ с циклом исключается)?
Лучше С++, чем ++С...
Sota вне форума Ответить с цитированием
Старый 09.02.2008, 18:03   #4
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Проще всего такие вещи делаются с массивом:
1. Задаем число элементов в массиве ( 100 в данном случае)
2. Заполняем массив числами от 1 до 100
3. генерируем случайное число в в пределах числа элементов массива
4. берем соответствующий элемент массива
5. сдвигаем массив, чтобы выбросить использованный элемент
6. уменьшаем на единицу число элементов массива и возвращаемся к п.3.

Без цикла обойтись всё равно трудно, поскольку числа случайные по определению. Можно, конечно, покопаться в математике (что-то такое было с лотерейными числами), но стоит ли для простого случая?
B_N вне форума Ответить с цитированием
Старый 09.02.2008, 18:07   #5
<vlad>
Пользователь
 
Аватар для <vlad>
 
Регистрация: 27.01.2008
Сообщений: 29
По умолчанию

B_N все граммотно растолковал, нечего добавить )
<vlad> вне форума Ответить с цитированием
Старый 09.02.2008, 18:08   #6
Alek86
Форумчанин
 
Регистрация: 25.09.2007
Сообщений: 189
По умолчанию

>> сдвигаем массив, чтобы выбросить использованный элемент
знаешь, сколько нужно процессорного времени на это?
лучше std::list
Alek86 вне форума Ответить с цитированием
Старый 09.02.2008, 18:12   #7
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Alek86 Посмотреть сообщение
>> сдвигаем массив, чтобы выбросить использованный элемент
знаешь, сколько нужно процессорного времени на это?
лучше std::list
А сколько? Какой еще list? Массивы, вообще-то, с помощью memmove двигают.
B_N вне форума Ответить с цитированием
Старый 09.02.2008, 18:17   #8
Alek86
Форумчанин
 
Регистрация: 25.09.2007
Сообщений: 189
По умолчанию

http://www.gamedev.ru/articles/?id=70103
этот

какая разница, чем его двигают, все равно долго
хотя, если элементов всего 100 и не надо эту выборку часто повторять, то разница не особо заметна
Alek86 вне форума Ответить с цитированием
Старый 09.02.2008, 18:26   #9
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

2 Alek86

Милейший, не нужно так явно демонстрировать свою безграмотность. Я знаю прекрасно, что такое списки и еще знаю то, что написано в любой детской книжке - что доступ к произвольному элементу спика напрямую невозможен. "все равно долго" как Вы выразились - это, в данном случае, 100 инструкций MOVSD со средней длиной аргумента - 50 двойных слов, даже говорить смешно, как это долго.
B_N вне форума Ответить с цитированием
Старый 09.02.2008, 19:39   #10
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Цитата:
5. сдвигаем массив, чтобы выбросить использованный элемент
Может, просто поменять его с последним?
still_alive вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Просто интерестно... Ніжний Диявол Свободное общение 5 14.07.2008 07:41
Просто, но справиться не могу. Небесный Общие вопросы Delphi 1 05.05.2008 11:32
Просто прошу HELP..... stalker Паскаль, Turbo Pascal, PascalABC.NET 7 13.02.2007 20:23
просто сныкать... Аlex Win Api 2 18.11.2006 04:49