Developing.ru
Выборка случайного элемента из двумерного массива
4 сообщения • Страница 1 из 1
Ini Сообщения: 2 Зарегистрирован: 26 ноя 2010, 07:01
Здравствуйте. Помогите пожалуйста с решением задачи. Нужно создать двумерный массив и произвести с ним следующие операции:
Найти максимальный и минимальный элемент двумерного массива
Найти элементы массива, повторяющиеся более одного раза
Найти все отрицательные элементы в массиве, и заменить их на ноль
Сделать из массива выборку случайного элемента
Реализую так:
#include #include int main() < int masotr [5]; int dvumas[4][4] = // Определение двумерного массива < , , , >; int i,k,j,v,; printf("Что ищем? 1 – Максимальное и минимальное, 2 – Повторы более одного раза, 3 – Все отрицательные значения, 4 – Случайный элемент"); v = 0; while(v==0) < scanf("%d",&v); printf("\n"); if(v!=1&&v!=2&&v!=3&&v!=4) v=0; >if(v==1) < //Нахождение максимального и минимального элементов int *maxel = &dvumas[0][0]; // Определение указателя на максимальный эл. int *minel = &dvumas[0][0]; // Определение указателя на минимальный эл. for( i = 0 ; i < 4 ; i++ ) < if(dvumas[i][i] >*maxel ) maxel = &dvumas[i][i]; if(dvumas[i][i] < *minel ) minel = &dvumas[i][i]; >; printf("Maximum: %d %c",*maxel,'\n'); printf("Minimum: %d %c",*minel,'\n'); >; if(v==2) < //Нахождение элементов массива, встречающихся более одного раза for (k=0;k<4;k++) for (j=0;j<4;j++) dvumas[masotr[k,j]]++; for(i=0;i<5;i++)cout <; if(v==3) < // Найти все отрицательные элементы в массиве, и заменить их на ноль for (k=0;k<4;k++) for (j=0;j<4;j++)< if (array[ k,j ] >0) < array[ k,j ] = 1; >> >; system("pause"); return 0; >
Проблема в решении последней задачи. Не знаю как ее начать решать. Как к ней вообще подступиться? С чего начать?
Romeo Сообщения: 3091 Зарегистрирован: 02 мар 2004, 17:25 Откуда: Крым, Севастополь Контактная информация:
Как выбрать случайный элемент из массива js
Чтобы выбрать случайный элемент из массива можно воспользоваться методами Math.random() и Math.floor() :
20 октября 2022
Выбрать случайный элемент массива можно не только с помощью стандартных возможностей языка.
Давайте обратимся к библиотеке Lodash, там есть именно то, что нам нужно.
const movies = [ 'Star Wars', 'Pirates of the Caribbean', 'Lord of the Rings', 'Avengers', 'The Dark Fields', ]; //выбираем фильм на вечер с помощью метода _.sample() const random = _.sample(movies); console.log("Random:", random); // => Random: Pirates of the caribbean
Познакомились с методом _.sample() и выбрали фильм на вечер.
Документация:
- _.sample()
использование random в массивах С++
Как из массива данных типа char вывести случайные пары элементов, чтобы те не повторялись? Уже сделал работающую программу для вывода этих рандомных пар, но они повторяются. Буду очень благодарен за помощь!
setlocale(LC_ALL, "Rus"); const char* a1[6] = < "ABC","ACB","BCA","BAC","CAB","CBA" >; srand(time(nullptr)); int c = 6; for (int i = 1; i < 7; i++) < cout return 0;
Отслеживать
задан 5 дек 2019 в 20:48
1 4 4 бронзовых знака
Возьмите просто abс и скормите это в std::next_permutation, не используйте ранд - это не энтропия а просто функция y(t), есть std::mt
5 дек 2019 в 22:00
я начал изучать с++ пару недель назад и не совсем понимаю, как это должно выглядеть, простите, если спрашиваю банальные вещи
5 дек 2019 в 22:05
Что именно Вы хотите сделать, какой вывод вы ожидаете ?
5 дек 2019 в 22:42
Не повторялись пары, элементы в праре или просто элементы? Последнее при требуемом их количестве невозможно 🙂
6 дек 2019 в 4:57
можно создать объект mt19937 (mersenne twister) он более рандомный
– user245150
6 дек 2019 в 12:10
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
#include #include using namespace std; int main() < const char* a1[6] = ; // слова int c = 6, j = 0, r, s, f; int num[60]; // рабочий массив для хранения индексов напечатанных слов for (int i = 0; i < 60; i++) num[i] = 0; setlocale(LC_ALL, "Rus"); random_device rd; // генератор сл.чисел mt19937 gen(rd()); uniform_int_distribution<>dist(0,5); // сл.числа в нормированном диапазоне от 0 до 5 while (j < 60) < r = dist(gen); do < s = dist(gen); >while(s == r); // слова в паре не должны повторяться f = 1; // флажок уникальной пары слов if(j > 0) // если это не первая пара, ищем ее среди напечатанных for (int k = 0; k < j; k += 2) if(r == num[k] && s == num[k+1]) < // если новая пара слов найдена среди напечатанных f = 0; // сбросить флаг уникальной пары break; >if(f == 1) < // если новая пара слов уникальна, сохраним индексы слов в массиве и печатаем num[j] = r; num[j+1] = s; cout > cout )" data-controller="se-share-sheet" data-se-share-sheet-title="Поделиться ссылкой на ответ" data-se-share-sheet-subtitle="" data-se-share-sheet-post-type="answer" data-se-share-sheet-social="facebook twitter " data-se-share-sheet-location="2" data-se-share-sheet-license-url="https%3a%2f%2fcreativecommons.org%2flicenses%2fby-sa%2f4.0%2f" data-se-share-sheet-license-name="CC BY-SA 4.0" data-s-popover-placement="bottom-start">Поделиться)" title="">Улучшить ответ)">изменён 6 дек 2019 в 11:59ответ дан 6 дек 2019 в 9:06 anshapanshap5353 серебряных знака6 бронзовых знаков