Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.67
Stenl1
3 / 3 / 1
Регистрация: 01.12.2009
Сообщений: 238
#1

Перемешивание двухмерного массива - C++

22.06.2011, 19:47. Просмотров 2356. Ответов 17
Метки нет (Все метки)

Подскажите как можно перемешать двухмерный массив таким образом , чтобы он в цикле по строкам и столбцам массива перебирал элементы массива по разу и менял местами значения текущего элемента и случайно выбранного элемента массива.
Сам массив:



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
#include <iostream>
#include <iomanip>
using namespace std;
 
int main()
{   
    int card =1;
    int deck[4][13]; //private
 
    for(int row = 0; row <= 3; row++)
    {
        
         for(int column = 0; column <= 12; column++)
        {
            deck[row][column] = card;
            card++;
        }
    }
/**********************************/
 //Вывод массива по правильном порядке
          for(int i = 0;i <= 3; i++)
    {
        for(int j = 0; j <= 12; j++)
            cout << setw(2)<< deck[i][j] << ' ';
        cout << endl;
    }
    system("pause");    
    return 0;
}
Пробовал через функцию rand() .Но это не то что нужно .Там просто выбирает случайные элементы .А мне нужно чтоб они даже не повторялись.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2011, 19:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перемешивание двухмерного массива (C++):

Перемешивание массива - C++
как переписать мой код так чтоб программа печатала функцию несколько раз.и чтоб ответы Rand не совпадали с друг другом void...

Перемешивание двумерного массива - C++
Помогите! Не могу додуматься, как перемешать двумерный массив, интернет уже весь перелопатил, так толкового ничего и не нашел. Срочно...

Случайное перемешивание содержимого одномерного массива - C++
Здравствуйте. Подскажите пожалуйста как реализовать случайное перемешивание содержимого одномерного массива.

Перемешивание элементов массива случайным образом - C++
Здравствуйте! Помогите пожалуйста. Нужно перемешать елементы массива случайным образом. Масив вводится вручную, а после нужно перемешать...

Перемешивание элементов массива случайным образом - C++
Здравствуйте. Помогите написать функцию, которая рандомно перемешивает элементы массива. void PeremeshivanieMassiva(int m); void...

Перемешивание элементов массива - найти ошибку в коде - C++
Добрый день! Помогите с заданием: необходимо перемешать элементы массива сам массив: const int size_2=20; int arro; ...

17
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
22.06.2011, 21:40 #2
Я задание не понял. Ты должен пробежаться по массиву и с каждым и с каждым элементом что сделать?
0
Stenl1
3 / 3 / 1
Регистрация: 01.12.2009
Сообщений: 238
22.06.2011, 21:52  [ТС] #3
Запусти ее в IDE .Увидишь она распечатывает массив по порядку от 1 до 52 .Мне надо его перемешать , чтоб он был в разнобой.
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
22.06.2011, 22:03 #4
ясно, а алгоритм Лемера пойдёт? Это такая штука, которая позволяет делать следующее: пусть имеется 4 числа 0,1,2,3; вот с помощью этого алгоритма их можно выводить так, чтобы они не повторялись и были перемешаны
2,3,1,0
Так, а если бесконечный цикл запустить то будет так:
2,3,1,0,2,3,1,0,2,3,1,0,2,3,1,0,

Кроме того можно менять начальное значение, другие всякие параметры в общем всяко можно мешать, например:3,1,0,2 и т.д., повторяться не будут

По-моему, твой случай
0
Stenl1
3 / 3 / 1
Регистрация: 01.12.2009
Сообщений: 238
22.06.2011, 22:09  [ТС] #5
Ты как бы мне для одномерного массива предлагаешь -если я правильно понял.А мне нужно для двух мерного!
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
22.06.2011, 22:31 #6
Да вот не по фиг. Если этот алгоритм тебе подходит в смысле случайности, тогда делай так:
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
#include <iostream>
#include <iomanip>
using namespace std;
 
int main()
{       
        int card =1;
        int deck[4][13]; //private
 
        for(int row = 0; row <= 3; row++)
        {
                
             for(int column = 0; column <= 12; column++)
                {
                        deck[row][column] = card;
                        card++;
                }
        }
/**********************************/
 //Вывод массива по правильном порядке
          for(int i = 0;i <= 3; i++)
        {
                for(int j = 0; j <= 12; j++)
                        cout << setw(2)<< deck[i][j] << ' ';
                cout << endl;
        }
 
        //Пусть эти числа у тебя выпали с помощью алгоритма Лемера:
        int ch_1= 36;         
        int ch_2= 48;         
        int ch_3= 8;         
        //Вообще-то их должно выпасть 52 неповторяющихся числа, но для примера возьмём три числа
 
 
        //Вывод будешь осуществлять так:
        printf("%d\n", deck [ch_1/13][ch_1%13]); 
        printf("%d\n", deck [ch_2/13][ch_2%13]); 
        printf("%d\n", deck [ch_3/13][ch_3%13]); 
 
        system("pause");        
        return 0;
 
}
0
Stenl1
3 / 3 / 1
Регистрация: 01.12.2009
Сообщений: 238
22.06.2011, 22:39  [ТС] #7
Если так все 52 числа выводить то это полный бред получится , а если их 1000 будет или более.Надо значит что то другое.
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
22.06.2011, 22:49 #8
Естественно.
Ну, я думаю ты сам дойдёшь как сделать это красиво и компактно. Удачи!
0
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
23.06.2011, 01:03 #9
что вы тут мутите?
C++
1
2
3
4
5
6
7
          for(int j = 0;j <= 12; j++)
              for(int i = 0; i <= 3; i++) {
                  int temp=deck[i][j];
                  int val=rand()%4;
                  deck[i][j]=deck[val][j];
                  deck[val][j]=temp;
              }
0
Stenl1
3 / 3 / 1
Регистрация: 01.12.2009
Сообщений: 238
23.06.2011, 06:52  [ТС] #10
В
C++
1
int val=rand()%4;    deck[i][j]=deck[val][j];
Может же такое быть что случайно сгенерируется одно и тоже число.Тогда в массиве из 52 чисел попадутся 2 одинаковых значения!!??
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
23.06.2011, 07:40 #11
Цитата Сообщение от Stenl1 Посмотреть сообщение
как можно перемешать двухмерный массив таким образом , чтобы он в цикле по строкам и столбцам массива перебирал элементы массива по разу и менял местами значения текущего элемента и случайно выбранного элемента массива
Для этого нужно
Цитата Сообщение от Stenl1 Посмотреть сообщение
в цикле по строкам и столбцам массива перебирал элементы массива по разу и менял местами значения текущего элемента и случайно выбранного элемента массива
У тебя же алгоритм подробно описан! В чём вообще вопрос то быть может? Обход массива ты делать умеешь. Генерировать случайное число - тоже. В задании не сказано, что ты не можешь менять местами один и тот-же элемент несколько раз, ты это выдумал сам. Сам придумал себе гемор и мучаешься. Делай именно то, что от тебя требуется по заданию и никаких вопросов не возникнет.
0
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
23.06.2011, 13:08 #12
Stenl1,
лишних чисел в массиве НЕ появится.
запускать то пробывал?
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
23.06.2011, 19:09 #13
Цитата Сообщение от OstapBender Посмотреть сообщение
что вы тут мутите?



мутишь ты, я дело говорю. Я пробовал запускать.
14 1 40 1
28 41 2 2
3 29 29 3
17 30 4 4
44 5 44 18
19 45 6 19
33 46 33 46
47 8 8 34
35 48 35 48
10 23 10 10
24 24 11 11
12 25 51 25
13 13 26 39
0
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
23.06.2011, 20:44 #14
kravam, чего????
что ты за листинг кинул??
он невозможен!
мой алгоритм - это стандартный банальный алгоритм перемешивания (ведь оно нужно ??)
да, некоторые элементы могут переставиться 2 или больше раз, но кого волнует?

цитирую:
Цитата Сообщение от Stenl1 Посмотреть сообщение
Подскажите как можно перемешать двухмерный массив таким образом , чтобы он в цикле по строкам и столбцам массива перебирал элементы массива по разу и менял местами значения текущего элемента и случайно выбранного элемента массива.
привожу 4 скрина работы моей программы
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
24.06.2011, 15:56 #15
OstapBender, я понял, но тогда надо:
C++
1
2
3
4
5
6
7
          int* p= &deck [0][0];
          for(int i = 0;i < 4* 13; i++) {
                                  int temp=p[i];
                                  int val=rand()%(4* 13);
                                  p[i]=p[val];
                                  p[val]=temp;
                          }
, согласись?
0
24.06.2011, 15:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2011, 15:56
Привет! Вот еще темы с ответами:

Из двухмерного массива в одномерный - C++
Всем привет.Передо мной предстала задача перевести двухмерный массив в одномерный. Вот пример : 1 0 0 1 0 0 0 1 1 0 0 1 1 1 0 1...

Сортировка двухмерного массива - C++
Здравствуйте, Нужно применить сортировку к текстовой базе данных. Поля базы только string. Я записываю БД в двумерный массив string. ...

Сортировка двухмерного массива - C++
Дан двухмерный массив. Отсортировать столбики массива, поставив вначале четные элементы,а потом нечетные, не меняя при этом их порядок...

Сортировка двухмерного массива - C++
Помогите!!!Нужно отсортировать двухмерный массив с использованием указателя. #include&lt;iostream&gt; #include&lt;stdlib.h&gt; #include&lt;time.h&gt; ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru