Форум программистов, компьютерный форум CyberForum.ru

Двумерный массив с уникальными элементами - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Передать файл в процедуру http://www.cyberforum.ru/cpp-beginners/thread858748.html
Как передать файл в процедуру? Вот код: #include <cstdlib> #include <iostream> #include <stdio.h> using namespace std; char simvol; void E(void );
C++ Натуральные числа (НОД) Даны натуральные числа n,m; найти НОД(n,m). Использовать программу, включающую рекурсивную процедуру вычисления НОД, основанную на соотношении НОД(n,m)=НОД(m,r), где r-остаток от деления n на m. Чем эта программа хуже нерекурсивной программы вычисления НОД(n,m)? http://www.cyberforum.ru/cpp-beginners/thread858745.html
Написать коментарии C++
#include <iostream> class S { public: virtual int get() = 0;}; class A1 : public S { public: virtual int get() { return a1; } private:
C++ Как сделать, чтобы окно выполнения сразу не закрывалось?
помогите пожалуйста, после компиляции при выполнении окно очень быстро пропадает. как сделать что бы оно сразу не закрывалось?
C++ Надо переделать немного программу http://www.cyberforum.ru/cpp-beginners/thread858733.html
Смотрите есть программа на решение методом хорд нелинейных уравнений. Но проблема в том что я не могу ее переработать так чтоб данные можно было вводить с клавиатуры #include <iostream> #include <math.h> using namespace std; float m_ch(float, float, float); float your_function(float); int main() {
C++ чтение из файла определенной строки Доброго времени суток. Передо мной встала задача, прочитать определённую строку из текстового файла. прочитать весь файл целиком я могу. Но вот определённую строку... С чего начать, не подскажете? подробнее

Показать сообщение отдельно
daslex
1270 / 515 / 106
Регистрация: 02.08.2011
Сообщений: 2,654
09.05.2013, 15:11     Двумерный массив с уникальными элементами
Вот пример на относительно простом алгоритме.

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

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

Так как алгоритм достаточно прост, то сам по себе вообще не эффективен.
Если подходит и нужны комментарии, то опишу.

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <iostream>
#include <ctime>
 
const int N=9,M=9; //Число колонок и строк
 
bool check_arrstroki(int Arr[])
{
    for (int i=0;i<N-1;i++)
    {
        for (int j=i+1;j<N;j++)
        {
            if (Arr[i]==Arr[j]) return 0;
        }
    }
    return true;
}
 
bool check_arrkolonki(int Arr[])
{
    for (int i=0;i<M-1;i++)
    {
        for (int j=i+1;j<M;j++)
        {
            if (Arr[i]==Arr[j]) return 0;
        }
    }
    return true;
}
 
void generator(int Arr[])
{
    while (!check_arrstroki(Arr))
    {
    for (int i=0;i<N;i++)
    {
        Arr[i]=rand()%100+1; //Разброс генерируемых чисел
    }
    }
}
 
void show_arrstroki(int Arr[])
{
    for (int i=0;i<N;i++)
    {
        std::cout<<Arr[i]<<"  ";
    }
    std::cout<<"\n";
}
 
void show_arr(int Arr[][M])
{
    for (int i=0;i<N;i++)
    {
        for (int j=0;j<M;j++)
        {
            std::cout<<Arr[i][j]<<"\t";
        }
        std::cout<<"\n";
    }
}
 
bool check_Arr(int Arr[][M])
{
    int ArrKolonki[M];
    //std::cout<<"\n";
 
     for (int i=0;i<M;i++)
     {
         for (int j=0;j<M;j++)
         {
            ArrKolonki[j]=Arr[j][i];            
         }  
        //std::cout<<"\n";
 
        for (int i=0;i<M;i++)
        {
        //  std::cout<<ArrKolonki[i]<<"  ";
        }
        if (!check_arrkolonki(ArrKolonki)) return false;
     }
 
 
    
    return true;
}
 
int main()
{
    int ArrStroki[N];
    int Arr[N][M];
    srand(time(NULL));
 
    
    while (!check_Arr(Arr))
    {
    for (int i=0;i<M;i++)
    {
    generator(ArrStroki);
    //show_arrstroki(ArrStroki);
 
       for (int k=0;k<N;k++)
       {
           Arr[i][k]=ArrStroki[k];
       }
 
    ArrStroki[0]=ArrStroki[1];
    }
    
    }
    
    show_arr(Arr);
    
 
    std::cin.get();
 
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru