uForum.uz

uForum.uz (https://uforum.uz/index.php)
-   C/C++, Прикладные вопросы (https://uforum.uz/forumdisplay.php?f=162)
-   -   256 элементов с помощью функции rand() (https://uforum.uz/showthread.php?t=5325)

blasterjon 06.06.2008 13:41

256 элементов с помощью функции rand()
 
как можно генерироват массива состоящих из 256 элементов с помощью функции rand(). Один число из диапозона 0--256 повторялся один раз. Исходники можно оставит здесь.

JH 06.06.2008 13:59

Заполнить массив числами от 0 до 255. Потом сделать 128 случайных перестановок.

JH 06.06.2008 14:03

Цитата:

Сообщение от Jahongir Haitov (Сообщение 107840)
Заполнить массив числами от 0 до 255. Потом сделать 128 случайных перестановок.

Это даст довольно хорошо рассортированный список. Если хотите гарантированно перетасовать все числа, то делайте 255 перестановок, насильно меняя каждый элемент массива местами с любым из последующих.

vcoder 14.01.2009 05:48

Цитата:

Сообщение от Jahongir Haitov (Сообщение 107840)
Заполнить массив числами от 0 до 255. Потом сделать 128 случайных перестановок.

Респект - совершенно верный ответ!

Господа, читайте классику программирования!
Этот алгоритм (как и множество других) есть в книге Д. Кнута "Искусство программирования"

Aziz Madetov 14.01.2009 12:14

Цитата:

Сообщение от Jahongir Haitov (Сообщение 107842)
Это даст довольно хорошо рассортированный список. Если хотите гарантированно перетасовать все числа, то делайте 255 перестановок, насильно меняя каждый элемент массива местами с любым из последующих.

В таком случае, должно быть 254 перестановки, потому что элемент, меняющий позицию, не учитывается.
Ой, сорри, ошибся. Все верно! Должно быть 255 перестановок :)

_TrachinuS_ 14.01.2009 12:36

Мдяя книжка Д. Кнута "Искусство программирования" это тру!

dovdir 19.03.2009 15:07

primerno tak budet
Код:

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main(void) {

        int len=256;
        int buf_num;
        int *a=new int[len];
        int is=0;
        int ecx=0;

        srand(time(NULL));
        for(int i=0;;i++){
                if(ecx==len)
                        break;
                buf_num=rand()%256+1;
                for(int j=0;j<ecx;j++) {
                        if(a[j]==buf_num) {
                                is=1;
                                break;
                        }
                        is=0;
                }

                if(!is) {
                        a[ecx]=buf_num;
                        ecx++;
                        is=0;
                }
        }

        for(int i=0;i<len;i++)
                cout<<i<<" -> "<<a[i]<<endl;
    return 0;
}



Текущее время: 01:42. Часовой пояс GMT +5.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
OOO «Единый интегратор UZINFOCOM»