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

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

Войти
Регистрация
Восстановить пароль
 
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
#1

Как заполнить такой массив - C++

14.12.2009, 14:58. Просмотров 461. Ответов 4
Метки нет (Все метки)

Есть задача создать и заполнить массив вида

C++
1
int massiv[x][5]
числами от 1 до 13


в каждом элементе массива должно быть 5 цифр от 1 до 13 причем числа не должны повторяться. Нужно перебрать все возможные комбинации

как я посчитал в excel комбинаций должно быть 1287

я решил эту задчу но она очень долго работает я так и не смог дождться когда программа закончит выполняться
можно ли это сделать как то по другому ?

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
int massiv[154430][5]; int i; int i1; int i2; int i3; int i4; int kol;
int n=0;
 
for(i=1; i<14; i++){  /// делаю первичное заполнение массива получаеться 154430 элементов
for(i1=1; i1<14; i1++){
for(i2=1; i2<14; i2++){
for(i3=1; i3<14; i3++){
for(i4=1; i4<14; i4++){
 
if(i!=i1&&i!=i2&&i!=i3&&i!=i4&&i1!=i2&&i1!=i3&&i1!=i4&&i2!=i3&&i2!=i4&&i3!=i4){}
 
massiv[n][0]=i;massiv[n][1]=i1;massiv[n][2]=i2;massiv[n][3]=i3;massiv[n][4]=i4;
n++;
}}}}}
 
 
for(i=0; i<154430; i++){   // удаляю все повторы 154430*154430  получаеться 23848624900 и это очень дождаться завершения думаю не реально
    for(i1=0; i1<154430; i1++){
        if(i!=i1){
 
            if(massiv[i][0]==massiv[i1][0]||massiv[i][0]==massiv[i1][1]||massiv[i][0]==massiv[i1][2]||massiv[i][0]==massiv[i1][3]||massiv[i][0]==massiv[i1][4]){kol++;}
 
            if(massiv[i][1]==massiv[i1][0]||massiv[i][1]==massiv[i1][1]||massiv[i][1]==massiv[i1][2]||massiv[i][1]==massiv[i1][3]||massiv[i][1]==massiv[i1][4]){kol++;}
 
            if(massiv[i][2]==massiv[i1][0]||massiv[i][2]==massiv[i1][1]||massiv[i][2]==massiv[i1][2]||massiv[i][2]==massiv[i1][3]||massiv[i][2]==massiv[i1][4]){kol++;}
 
            if(massiv[i][3]==massiv[i1][0]||massiv[i][3]==massiv[i1][1]||massiv[i][3]==massiv[i1][2]||massiv[i][3]==massiv[i1][3]||massiv[i][3]==massiv[i1][4]){kol++;}
 
            if(massiv[i][4]==massiv[i1][0]||massiv[i][4]==massiv[i1][1]||massiv[i][4]==massiv[i1][2]||massiv[i][4]==massiv[i1][3]||massiv[i][4]==massiv[i1][4]){kol++;}
 
 
            if (kol==5){massiv[i1][0]=0;massiv[i1][1]=0;massiv[i1][2]=0;massiv[i1][3]=0;massiv[i1][4]=0;}
            kol=0;
 
        }}}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2009, 14:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как заполнить такой массив (C++):

Как инициализировать такой массив - C++
Нужно в проге(консольное приложение Win32) испоьзовать массив таких размеров double massiv_resultatov={0}; просто так я не смог его...

Как объявить указатель на массив через typedef и как инициализировать такой тип - C++
Как заставить заработать этот фрагмент кода? INT_L -- указатель на массив из 100 элементов типа char; Не получается в переменную C...

Как передать такой массив в функцию - C++
Есть большой массив память для которого выделяеться динамически double *****massiv_resultatov = new double****; for(i = 0; i &lt; 25;...

Не пойму как реализовать такой массив=) (формирование массива сумм) - C++
Заданий масив C(30). сложить программу формирования масива сумм: B(1)=C(1)+C(6)+C(11)+...+C(26) ...

Как заполнить массив! - C++
Приветствую Вас друзья! Кто знает подскажите как заполнить массив, числами с плавающей запятой. объявляю: float mas; ...

Как заполнить массив - C++
Доброго времени суток, подскажите, как записать данные в такой массив? map&lt;string, map&lt;int, float&gt;&gt; map;

4
kuroiryuu
317 / 301 / 23
Регистрация: 05.11.2009
Сообщений: 712
Завершенные тесты: 2
14.12.2009, 17:04 #2
а повторов не должно быть по столбцам?
0
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
14.12.2009, 17:40  [ТС] #3
нет по строкам

то есть вариант

2-3-4-5-6 или 3-4-7-8-2 приемлемы

а например

2-3-4-5-2 или 3-4-3-5-6 ошибочны из за повторов
0
Atrus
12 / 12 / 0
Регистрация: 08.07.2009
Сообщений: 45
14.12.2009, 18:40 #4
Делай ч\з рекурсию.
Создаешь функцию которая инкрементит n-й элемент.
В случае если n>13, инкрементит n-1 в случае если n-1>13 инкриментит n-2... и так до конца если 1-й эл-т > 13 - перебор закончен.
0
kuroiryuu
317 / 301 / 23
Регистрация: 05.11.2009
Сообщений: 712
Завершенные тесты: 2
14.12.2009, 19:53 #5
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
#include<stdio.h>
#include <stdlib.h>
 
bool CheckNum(int **mas,int n, int m, int check, int mas_i, int mas_j)
{
    int count = 0;
    for (int i = 0; i < n; i++)
        if (check == mas[i][mas_j])
            count++;
    for (int j = 0; j < m; j++)
        if (check == mas[mas_i][j])
            count++;
    if (count > 0)
        return true;
    else
        count = 0;
    
    return false;
}
 
int GetRandomNum()
{
    int tmp = 0;
    while(!(tmp >= 1 && tmp <= 13)) 
        tmp = rand();
    return tmp;
}
 
int main(void)
{
    srand(14);
    int** mas;
    int n = 0;
    scanf("%d",&n);
    mas = new int*[n];
    for(int i = 0; i < n; i++)
    {
        mas[i] = new int[5];
        for (int j = 0; j < 5; j++)
            mas[i][j] = 0;
    }
 
    
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < 5; j++)
        {
            bool flag = true;
            while(flag)
            {
                int tmp = GetRandomNum();
                flag = CheckNum(mas,n,5,tmp, i, j);
                if (!flag) mas[i][j] = tmp;
            }
        }
    }
 
    for (int i=0; i < n; ++i) 
    {
        for (int j = 0; j < 5; ++j) 
            printf("%5d ", mas[i][j]);
        printf("\n") ;
    }
    return 0;
}
вроде по условию задания правильно работает...
но здесь идёт проверка на не повторение и в строке и в соответствующем столбце, куда должно добавится число...
по диагоналям не проверял
правда тут один маленький подвох для данного массива: число строк у этого массива должно быть не больше 13.
0
14.12.2009, 19:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2009, 19:53
Привет! Вот еще темы с ответами:

как заполнить массив - C++
как заполнить массив состоящий из определенного числа элементов

Как заполнить массив в цикле? - C++
Добрый день, каким образом можно заполнить массив размера n, числами от 1 до n по порядку? Как самому заполнить - это понятно, а как...

Как заполнить массив слов? - C++
Есть двумерный динамический массив строк. Надо занести в каждую строку v при создании слово наподобии как с обычным массивом. char...

Как заполнить массив рандом? - C++
Как заполнить масив рандом в c++ Visual studio 2010 ?


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

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

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