|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » С/С++ | Выбор 10 случайных элементов из массива |
|
С/С++ | Выбор 10 случайных элементов из массива
|
Новый участник Сообщения: 10 |
Профиль | Отправить PM | Цитировать Надо реализовать такую штуку.
Имееться масив на (макс) 200 чисел Заполняеться просто от 1 до 200, надо что бы прога выдала 10 из них полным рендомом, причём что бы не повторялись, кто знает как это сделать на с++ а ещё лучше в с++ builder 6.0. |
|
Отправлено: 19:48, 28-08-2006 |
Пользователь Сообщения: 149
|
Профиль | Отправить PM | Цитировать Цитата:
Короче, я толком не понял даже формулировки задачи. И какой диапазон у членов массива? И что значит Цитата:
Короче, ждем конкретизации задачи. |
||
Отправлено: 20:21, 28-08-2006 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 878
|
Профиль | Сайт | Отправить PM | Цитировать Vovius
Цитата:
Допустим исходный массив mass. Цитата:
Не забудьте подключить библиотеку Math. |
||
Отправлено: 20:55, 28-08-2006 | #3 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать #include <vector> #include <cstdlib> int main() { // >> Надо реализовать такую штуку. // >> Имееться масив на (макс) 200 чисел std::vector<double> array1(200); // >> Заполняеться просто от 1 до 200, for(unsigned n=0; n<array1.size(); +n) array1[n] = n + 1; // >> надо что бы прога выдала 10 из них полным рендомом, std::randomize(); for(unsigned n=0; n<10; ++n) { unsigned rand_index = std::random(array1.size()); std::cout << array1[rand_index] << std::endl; // >> причём что бы не повторялись, std::vector<double>::iterator i = array1.begin(); std::advance(i, rand_index); array1.erase(i); } // >> кто знает как это сделать на с++ а ещё лучше в с++ builder 6.0. // работает с любым компилятором C++ 3.3.2 под любую ОС return 0; } |
Отправлено: 06:44, 29-08-2006 | #4 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Cyberhawk
Ну вот видьшь ниже всё народ понял. XCodeR Спасибо за команду для рандома. pva Спасибо полезный исходник. |
|
Отправлено: 13:10, 29-08-2006 | #5 |
редкий гость Сообщения: 1696
|
Профиль | Сайт | Отправить PM | Цитировать pva
Небольша опечатка, должно быть А ещё можно воспользоваться random_shuffle. Правда, если нужны только 10 элементов из 200 это будет слегка оверкилл. С другой стороны, он гарантированно линейный от размера массива (т.е. будет сделано 200 перестановок), а вариант pva, если ничего не путаю имеет сложность O(m*n) в худшем/среднем случае, где n - число требуемых элементов, а m - размер массива. Ещё такое придумалось: std::vector<int> array; //считаем, что как-то уже заполнено std::set<size_t> used; std::list<int> out; for (size_t i = 0; i < n; ++i) { size_t j = rand() % array.size(); while (used.find(j) != used.end()) j = (j+1) % array.size(); out.push_back(array[j]); used.insert(j); } Но вариант с rand_shuffle всё равно мне нравится больше. Своей краткостью. upd Поправил заголовок темы. Прошу в будущем давать более содержательные названия. |
------- Последний раз редактировалось ivank, 29-08-2006 в 23:41. Отправлено: 19:37, 29-08-2006 | #6 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Установка ActiveX элементов. | minion | Microsoft Windows NT/2000/2003 | 0 | 07-04-2009 16:41 | |
CSS выравнивание элементов | maaxiim | Вебмастеру | 14 | 19-06-2008 21:22 | |
Поиск элементов массива, чья сумма равна заданному числу | Qwe1 | Программирование и базы данных | 28 | 26-09-2006 03:31 | |
Генератор случайных чисел | Murrey | Хочу все знать | 3 | 22-08-2006 13:00 | |
Исчезновение элементов автозагрузки | Black_Devil | Microsoft Windows 2000/XP | 4 | 05-02-2006 15:00 |
|