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

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

29.07.2014, 16:42. Показов 2783. Ответов 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
9910 / 6447 / 2455
Регистрация: 21.01.2014
Сообщений: 27,371
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru