Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
 Аватар для krigan
1 / 1 / 3
Регистрация: 31.10.2012
Сообщений: 93

Группа повторений двух значений в случайном порядке, где кол-ва повторений разных значений относятся как 2:1

29.07.2014, 16:42. Показов 2802. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание: Заполнить двухмерный массив 8х8 значениями 0 и 1 случайным образом, но так, чтобы нулей было в два раза больше, чем единичек.

Воображения хватило только на вывод чисел от 0 до 1 в случайном порядке. Прошу помощи в решении пункта задачи с заполнением массива количеством 0-ей превышающим количество 1-ц в два раза.

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
#include<iostream>
#include<stdlib.h>
using namespace std;
 
void main()
 
{
setlocale(LC_ALL,"Rus");
 
int array[8][8];
int null=0, ed=0;
 
for (int i = 0; i <8; i++)
{
    for (int j = 0; j < 8; j++)
    {
        array[i][j]=rand()%2;
        cout.width(4),cout<<array[i][j];
        if (array[i][j]==0)null++;
        if (array[i][j]==1)ed++;
 
    }
 
    cout<<"\n\n";
    
}
 
cout<<" Количесвто нулей в массиве равно: " <<null;
cout<<"\n ";
 
cout<<"Количесвто единиц в массиве равно: " <<ed;
cout<<"\n\n ";
 
 
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.07.2014, 16:42
Ответы с готовыми решениями:

Вывод в случайном порядке без повторений
Подскажите пожалуйста, как вывести в случайном порядке без повторений? &lt;?php // Создаем цикл, в теле которого конструкция include ...

Выводим члены массива в случайном порядке, но без повторений
Нужно вывести члены массива в случайном порядке, но без повторения. Аналог случайного порядка в медиаплеерах. Добавлено через 29...

Вывести список слов в случайном порядке без повторений
Помогите пожалуйста, ошибка не появляется программа запускается и выполняет бесконечный цикл, но ничего не выводит(не возвращает) что то...

10
74 / 54 / 17
Регистрация: 10.07.2014
Сообщений: 329
29.07.2014, 16:57
Лучший ответ Сообщение было отмечено krigan как решение

Решение

Вместо этой строки
Цитата Сообщение от krigan Посмотреть сообщение
array[i][j]=rand()%2;
поставь такое
C
1
2
array[i][j]=rand()%3;
if (array[i][j]==2) array[i][j] = 0;
Хотя тут двоякое толкование задачи...
Возможно тебе надо чтобы нулей было строго в два раза больше?, а не случайно, но примерно...
Тогда задача нерешаема, ибо 64 (кол-во элементов) - на 3 не делится
1
 Аватар для krigan
1 / 1 / 3
Регистрация: 31.10.2012
Сообщений: 93
29.07.2014, 17:06  [ТС]
Спасибо! Отправляю в таком виде, а там, что Сансей скажет: не понравится - переделаем.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
29.07.2014, 17:51
Лучший ответ Сообщение было отмечено BRcr как решение

Решение

Во-первых, размер массива должен быть кратным трем. Во-вторых, rand() вовсе не гарантирует равномерного распределения значений из диапазона. Гарантирует лишь случайное.

Поэтому лучше сперва сгенерировать нужное количество значений, а потом перемешать массив.
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
    using namespace std;
    //////////////////////////////////////
    int arr[ 3 ][ 8 ],
        * arr_ptr( reinterpret_cast < int * > ( arr ) ),
        arr_size( sizeof( arr ) / sizeof( arr[ 0 ][ 0 ] ) );
    srand( time( 0 ) );
 
    fill( arr_ptr, arr_ptr + arr_size / 3, 0 );
    fill( arr_ptr + arr_size / 3, arr_ptr + arr_size, 1 );
 
    copy( arr_ptr, arr_ptr + arr_size, ostream_iterator < int > ( cout, " " ) );
    cout << "\n\n";
 
    random_shuffle( arr_ptr, arr_ptr + arr_size );
    copy( arr_ptr, arr_ptr + arr_size, ostream_iterator < int > ( cout, " " ) );
    cout << "\n\n";
 
    for ( size_t i( 0 ), i_limit( 3 ); i < i_limit; ++i )
    {
        for ( size_t k( 0 ), k_limit( 8 ); k < k_limit; ++k )
        {
            cout << arr[ i ][ k ] << " ";
        }
        cout << endl;
    }
Миниатюры
Группа повторений двух значений в случайном порядке, где кол-ва повторений разных значений относятся как 2:1  
1
 Аватар для DeadHipo
85 / 85 / 33
Регистрация: 21.09.2013
Сообщений: 339
29.07.2014, 17:59
Прощу прошения, но тебя не смущает то, что при каждом новом запуске у тебя новых чисел не возникает?
добавь randomize() и rand() поменяй на random();
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
#include<iostream>
#include<stdlib.h>
#include<math.h>
#include<conio.h>
using namespace std;
 
void main()
{
    setlocale(LC_ALL, "Rus");
    int array[8][8];
    int null = 0, ed = 0;
    randomize();
    for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 8; j++) {
 
            int number = random(3);
            if (number == 2) {
                number = 0;
            }
            array[i][j] = number;
            cout.width(4), cout << array[i][j];
            if (array[i][j] == 0)
                null++;
            if (array[i][j] == 1)
                ed++;
        }
        cout << "\n\n";
    }
    cout << " null: " << null;
    cout << "\n ";
    cout << "one: " << ed;
    cout << "\n\n ";
    getch();
}
1
74 / 54 / 17
Регистрация: 10.07.2014
Сообщений: 329
29.07.2014, 18:00

Не по теме:

Как то давным давно, в далёкой галактике...
в студенчестве, писал я курсовые под заказ. То что нормально шло студентам со специальности "Прикладное программирование" - насыщенный код типа вышенаписанного уважаемым BRcr
Вызывало лютый батхёрт у людей из физкультурного института... И им писался код типа кода ТС-а.


зы. random_shuffle - это новенькое ?
Тогда укажи, с какой версии компилятора, а то билдер 6 не потянет.. наверное, не проверял.
1
 Аватар для krigan
1 / 1 / 3
Регистрация: 31.10.2012
Сообщений: 93
29.07.2014, 18:04  [ТС]
Спасибо! Не самое удачное условие задачи, а так ничего сложного.

Добавлено через 2 минуты
Мой арсенал методов узковат, но это я тоже учёл.

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
#include<iostream>
#include<stdlib.h>
#include<time.h>
 
using namespace std;
 
void main()
 
{
setlocale(LC_ALL,"Rus");
srand(time(NULL));
 
int array[8][8];
int null=0, ed=0;
 
for (int i = 0; i <8; i++)
{
    for (int j = 0; j < 8; j++)
    {
        array[i][j]=rand()%3;
        if (array[i][j]==2) array[i][j] = 0;
        cout.width(4),cout<<array[i][j];
        if (array[i][j]==0)null++;
        if (array[i][j]==1)ed++;
 
    }
 
    cout<<"\n\n";
    
}
 
cout<<" Количесвто нулей в массиве равно: " <<null;
cout<<"\n ";
 
cout<<"Количесвто единиц в массиве равно: " <<ed;
cout<<"\n\n ";
 
 
}
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
29.07.2014, 18:23
Цитата Сообщение от krv Посмотреть сообщение
зы. random_shuffle - это новенькое ?
Да нет, в шестом билдере должна быть по идее...

А вся насыщенность в пять секунд заменяется велосипедами циклами при желании:
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
    int arr[ 3 ][ 8 ],
        * arr_ptr( reinterpret_cast < int * > ( arr ) ),
        arr_size( sizeof( arr ) / sizeof( arr[ 0 ][ 0 ] ) );
    srand( time( 0 ) );
 
    // fill( arr_ptr, arr_ptr + arr_size / 3, 0 );
    for ( size_t i( 0 ), i_limit( arr_size / 3 ); i < i_limit; ++i )
    {
        arr_ptr[ i ] = 0;
    }
 
    // fill( arr_ptr + arr_size / 3, arr_ptr + arr_size, 1 );
    for ( size_t i( arr_size / 3 ), i_limit( arr_size ); i < i_limit; ++i )
    {
        arr_ptr[ i ] = 1;
    }
 
    // copy( arr_ptr, arr_ptr + arr_size, ostream_iterator < int > ( cout, " " ) );
    for ( size_t i( 0 ), i_limit( arr_size ); i < i_limit; ++i )
    {
        cout << arr_ptr[ i ] << " ";
    }
    cout << "\n\n";
 
    // random_shuffle( arr_ptr, arr_ptr + arr_size );
    for ( size_t i( 0 ), i_limit( arr_size ); i < i_limit; ++i )
    {
        int tmp( arr_ptr[ i ] ), pos( rand( ) % arr_size );
        arr_ptr[ i ] = arr_ptr[ pos ];
        arr_ptr[ pos ] = tmp;
    }
    // copy( arr_ptr, arr_ptr + arr_size, ostream_iterator < int > ( cout, " " ) );
    for ( size_t i( 0 ), i_limit( arr_size ); i < i_limit; ++i )
    {
        cout << arr_ptr[ i ] << " ";
    }
    cout << "\n\n";
 
    for ( size_t i( 0 ), i_limit( 3 ); i < i_limit; ++i )
    {
        for ( size_t k( 0 ), k_limit( 8 ); k < k_limit; ++k )
        {
            cout << arr[ i ][ k ] << " ";
        }
        cout << endl;
    }
1
0 / 0 / 0
Регистрация: 12.07.2018
Сообщений: 7
12.07.2018, 17:30
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
#include<iostream>
#include<time.h>
 
/*12.   **Заполнить двухмерный массив 8х8 значениями 0 и 1 случайным образом, но так, 
чтобы нулей было в два раза больше, чем единичек.
*/
 
using namespace std;
 
int main() {
    srand(time(0));
    setlocale(LC_ALL, "ru");
    const int row = 8, col = 8;
    int mas[row][col], sumZERO = 0, sumONE = 0;
 
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
        {
            mas[i][j] = rand() % 2;
            cout << mas[i][j] << "\t";
            if (mas[i][j]) {
                sumONE++;
            }
            else {
                sumZERO++;
            }
        }
        cout << endl << endl;
    }
    cout << "Сумма единиц: " << sumONE << " | " << "Сумма нулей: " << sumZERO << endl
        << "Соотношение: " << (float)sumZERO / sumONE << "\n\n\n";
 
    for (int i, j; sumONE > col * row / 3;) {
        i = rand() % row;
        j = rand() % col;
        if (mas[i][j]) {
            mas[i][j] = 0;
            sumONE--;
        }
    }
    sumONE = 0; sumZERO = 0;
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
        {
            cout << mas[i][j] << "\t";
            if (mas[i][j]) {
                sumONE++;
            }
            else {
                sumZERO++;
            }
        }
        cout << endl << endl;
    }
    cout << "Сумма единиц: " << sumONE << " | " << "Сумма нулей: " << sumZERO << endl
        << "Соотношение: " << (float)sumZERO / sumONE;
    
    cin.get(); cin.get();
}
0
Модератор
 Аватар для D1973
9928 / 6465 / 2457
Регистрация: 21.01.2014
Сообщений: 27,420
Записей в блоге: 3
13.07.2018, 09:06
Mazursky, а ничего, что вопрос темы был исчерпан и закрыт 4 года назад, а?

Не по теме:

Как же задолбали эти некропостеры :ireful:

0
0 / 0 / 0
Регистрация: 12.07.2018
Сообщений: 7
28.07.2018, 12:27
D1973, а в чем собственно проблема??? Ну будет еще один вариант на выбор. Или вы считаете что программирование перестало существовать 4 года назад? Я б вас послал, да вижу - вы оттуда
 Комментарий модератора 
Цитата Сообщение от Mazursky Посмотреть сообщение
Я б вас послал, да вижу - вы оттуда
За это - пока предупреждение за нарушение п. 3.1 правил форума...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.07.2018, 12:27
Помогаю со студенческими работами здесь

Вывести список слов из списка в случайном порядке без повторений
Задача такова: Создать программу,которая будет выводить список слов в случайном порядке.На экране должны печататься без повторений ...

Генерация случайных значений без повторений
Всем привет! У меня проблема, надо рандомно раскидать 4 переменных без повторений, как это можно реализовать? Пока попробовал так, но прога...

Избавление от повторений значений в таблице StringGrid
Привет! я выполняю задание связанное с линейными списками и их выводом в табличном виде в StringGrid в билдере Дело в том, что при...

Рандомный выбор значений без повторений
Ситуация такая, попытался сделать выбор записей из лист бокса рандомно но без повторений. Сначала заношу все значения из листбокса в...

Выборка значений из столбцов без повторений.
Как можно создать перечень или список значений, содержащихся в столбце, таким образом, чтобы одинаковые значения не повторялись?


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru