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

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

Войти
Регистрация
Восстановить пароль
 
Grozaaa90
1 / 1 / 0
Регистрация: 27.05.2010
Сообщений: 15
#1

[C++] выбор нужных строк из двумерного массива чисел - C++

28.05.2010, 18:12. Просмотров 493. Ответов 0
Метки нет (Все метки)

Здравствуйте. Есть проблема с решением задачи.
Условие:
1) Есть числа от одного до 15-ти. Нужно сгруппировать эти числа в группы по три. [x y z]
2) Сделать это нужно так, чтобы в одной группе число не повторялось два раза [x y x] - не подходит.
3) Если в предыдущих группах два числа совпадают, то текущая группа также не подходит [x y z] ~ [a x y] - не подходит.
В общем, цель - сгруппировать элементы так, чтобы каждый был в группе с другими пятнадцатью только один раз, то есть сократить число групп до минимума.

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
117
118
119
120
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <windows.h>
 
int main(void)
{
    using namespace std;
    
    system("cls");
    unsigned short arr[3][3375]; // массив комбинаций
    int farr_count = 0; //количество комбинаций
    
    //всего дано 15 веществ. составить все возможные комбинации из трёх веществ.
    
    int ar;
        for (int i = 0; i < 15; i++)
        {
            for (int j = 0; j < 15; j++)
            {
                for (int k = 0; k < 15; k++)
            {
                farr_count ++;
                //std::cout << " " << farr_count << ")  ";
                    
                //инициализация двумерного массива комбинаций трёх веществ, проходит успешно
                arr[0][ar] = i+1;
                arr[1][ar] = j+1;
                arr[2][ar] = k+1;
                    
                //std::cout << arr[0][ar] << "  "<< arr[1][ar] << "  " <<arr[2][ar] << "\n";
                //cout << "ar:" << ar;
                ar++;
            }
            }
        }
 
    
    cout << "\nPress Enter button\n";
    getchar();
    
    
    unsigned short h[3][3000];
    int p = 0;
    for(ar = 0; ar < farr_count; ar++)
    {
        //cout<< "\n" << arr[0][ar] << "  "<< arr[1][ar] << "  " <<arr[2][ar];
        //исключение строк, в которых содержится два или более одинаковых элемента.
        
        bool wrong = false;
        
        if(arr[0][ar] ==  arr[1][ar] && arr[1][ar]== arr[2][ar])
        {wrong = true;}
        if(arr[0][ar] ==  arr[1][ar] || arr[1][ar]== arr[2][ar] || arr[0][ar] == arr[2][ar])
        {wrong = true;}
        
        
        
        if(wrong == false)
        {
            h[0][p] = arr[0][ar]; 
            h[1][p] = arr[1][ar]; 
            h[2][p] = arr[2][ar];
            //cout << "\n" << h[0][p] << "  "<< h[1][p] << "  " <<h[2][p] ;
            p++;
        }
        //else cout << "\n" << arr[0][ar] << "  "<< arr[1][ar] << "  " <<arr[2][ar] << "     wrong = true";
    }
    
    cout << "\nPress Enter button\n";
    getchar();
 
    unsigned short last[3][300];
    
    for (int i = 0; i <3; i++)
    {
        h[i][0] = i+1;
        last[i][0] = i+1;
    }
    
    int b = 0;
    for(int i = 0; i < p; i++) // окончательная проверка на совпадения в комбинациях 
    {
        bool wrong = false;
        int s;
        for (int c = 0; c < i; c++)
        {   
            s = 0;
            for(int j = 0; j < 3; j++)
            {
            for(int k = 0; k < 3; k++)
            {
                if(h[j][i] == h[k][c])
                {
                s++;
                if(s >= 2) // если два(или более) числа из двух комбинаций совпадают
                {/* cout << "\ts>=2"; */ wrong = true;}//то считаем строку не подходящей
                }
            }
            }
            
        }
        
        
        
        if(wrong == false)//если строка подходит, записываем её в массив
        {
            last[0][p] = h[0][i]; 
            last[1][p] = h[1][i]; 
            last[2][p] = h[2][i];
            cout << "\n" << last[0][b] << "  "<< last[1][b] << "  " <<last[2][b] << "\tgood string";
            b++;
        }
        else cout << "\n" << h[0][i] << "  "<< h[1][i] << "  " <<h[2][i] << "     wrong = true";
             //кроме первого раза, на практике, всё время печатается эта строка 
    }
    
 
    return 0;
}
Буду признателен за помощь. Задача реальная, и простая, но почему-то не выходит.
Компиллировал на MinGW.

Обратите внимание на строки 76-80. Если их убрать, то при выводе в первой строке будут нули. Это тоже для меня загадка.

Добавлено через 14 часов 2 минуты
Помогите, пожалуйста. Действительно важно получить ответ.

Добавлено через 4 часа 49 минут
Поднимаю тему.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2010, 18:12     [C++] выбор нужных строк из двумерного массива чисел
Посмотрите здесь:

Выбор чисел из массива строк - C++
Дан массив из n слов произвольной длины (длина слова не превышает 80 символов). Элементами слов могут быть любые графические символы. ...

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

Удаление строк из двумерного массива - C++
Подскажите, пожалуйста, как исправить код, чтобы удалялись только те строки, что поэлементно меньше. Т.е.т.е. 1 4 5 3 и 1 3 5 2 ...

Найти произведение строк двумерного массива - C++
Подскажите пожалуйста. Как найти произведение строк двумерного массива, первый элемент которого отрицателен?

Попарная сортировка строк двумерного массива - C++
Дан двумерный массив. NxL. Вывести левую медиану каждой пары строк массива, отсортированной по неубыванию. По-человечески: N...

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

Сортировка двумерного массива по сумме элементов строк - C++
Добрый день. Делаю лабораторную, задача: В двумерном массиве хранятся данные об оценках N студентов по М предметам. Номер строки...

Для заданного двумерного массива из n строк и m столбцов: - C++
помогите уже неделю не могу решить эту задачу Для заданного двумерного массива из n строк и m столбцов: Осуществить сглаживание...

Найти суммы элементов строк двумерного массива - C++
Объявите двумерный целочисленный массив, в котором n  m элементов. Выполните генерацию массива случайными целыми числами из промежутка [a;...

Сортировка строк двумерного массива по характеристике строки - C++
&quot;Характеристикой строки целочисленной матрицы назовем сумму ее положительных четных элементов. Переставляя строки заданной матрицы,...

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

Сравнение двумерного массива созданного из двух строк - C++
Вот первая проблема,если при вводе первого предложения поставить пробел то второе он вводить уже не требует а сразу работает далее, почем...


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

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

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