Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
pampam
0 / 0 / 0
Регистрация: 22.01.2014
Сообщений: 11
#1

Задача про Домино-2 - C++

10.12.2014, 00:23. Просмотров 1219. Ответов 6
Метки нет (Все метки)

Пожалуйста, помогите срочно!! Желательно код, или помогите переделать задачу про домино ранее на этом сайте: http://www.cyberforum.ru/cpp-beginners/thread841255.html

Набор домино состоит из прямоугольных костяшек, каждая из которых
разделена на две половинки линией, параллельной более короткой стороне. На
костяшках полного набора домино обозначены все возможные различные пары
чисел: (0, 0), (0, 1), (0, 2),...,(0, 6), (1, 1), (1, 2), (1, 3),...,(1, 6), (2, 2),..., (2, 6),
(3,3), (3,4),...,(3,6), ..., (6,6).
Из костяшек можно выкладывать цепочки, соединяя пары костяшек
короткими сторонами, если количества точек на соседних с местом соединения
половинках костяшек равны.
Некоторые костяшки были удалены из полного набора. Требуется
определить, самую длинную цепочку в заданном наборе, которую можно
построить.
Входные данные
В первой строке записано одно целое число N, равное количеству костяшек в
наборе. Каждая і*я из последующих N строк содержит по два числа Ai и Bі
количества точек на половинках i*й костяшки.
Выходные данные
В первой строке вывести длину цепочки.

Пример:
input
6
6 5
5 4
4 3
3 2
1 1
5 2

output
5
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2014, 00:23
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Задача про Домино-2 (C++):

Задача "Домино"
Пожалуйста помогите с задачей)) Ни как не могу решить :wall: :help: Набор...

Задача про осадки
Известны данные о количестве осадков, выпавших за каждый день месяца....

Задача про покер
На сайте e-olymp проходит 97%. Где ошибка? Пишет, что третий тест не проходит,...

Задача про скобки
Всем привет. Недавно показали мне такую задачу: ... намекнув на рекурсию....

Задача про банкомат
В банкомате есть купюры номиналом, 5000, 2000, 1000, 500 и тд. Но, купюры...

Задача про монахов
Условие такое: Имеется n монахов и m пирогов. Ведущий монах съедает за один...

6
19dmitry
33 / 33 / 22
Регистрация: 18.01.2014
Сообщений: 137
10.12.2014, 01:20 #2
Доброго времени суток. Моё решение данной задачи. Проверьте, полностью соответствует ли оно вашему условию.
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
#include<iostream>
using namespace std;
 
const int MAX = 28; // количество костяшек в наборе
 
struct num
{
    int num1;
    int num2;
};
 
int main()
{
    setlocale (LC_ALL, "RUSSIAN");
    int n;
    int k=0;
 
    do{
        cout << "ВВЕДИТЕ КОЛИЧЕСТВО КОСТЯШЕК: "; 
        cin >> n;
        if(n>28)
        {cout << "Число не должно превышать 28! ВВЕДИТЕ ЧИСЛО ВЕРНО!" << endl;}
    }while(n>28);
    cout << endl;
 
    num domino[MAX];
 
    for(int i=0; i<n; i++)
    {
        cout << i+1 << "-я костяшка: " << endl;
 
        do{
            cout << "1-половинка: "; cin >> domino[i].num1;
            if(domino[i].num1>6 || domino[i].num1<0)
            {cout << "Число должно находиться в пределах: 0-6. ВВЕДИТЕ ЧИСЛО ВЕРНО! " << endl;}
        }while(domino[i].num1>6 || domino[i].num1<0);
 
        do{
            cout << "2-половинка: "; cin >> domino[i].num2;
            if(domino[i].num2>6 || domino[i].num2<0)
            {cout << "Число должно находиться в пределах: 0-6. ВВЕДИТЕ ЧИСЛО ВЕРНО! " << endl;}
        }while(domino[i].num2>6 || domino[i].num2<0);
 
        if((domino[i-1].num1==domino[i].num2) || (domino[i-1].num2==domino[i].num1))
        {k++;}
 
        cout << endl;
    }
 
    cout << "ДЛИНА ЦЕПОЧКИ РАВНА: " << k << endl;
 
    system ("PAUSE");
    return 0;
}
1
pampam
0 / 0 / 0
Регистрация: 22.01.2014
Сообщений: 11
10.12.2014, 01:52  [ТС] #3
19dmitry большое спасибо
И у меня один вопрос: получается что в output дано неправильное число?
Потому что я сейчас на бумаге сделал получается вроде как и у вас в программа 4.
0
19dmitry
33 / 33 / 22
Регистрация: 18.01.2014
Сообщений: 137
10.12.2014, 02:04 #4
Я не большой специалист в домино. Но насколько я понимаю, крайние числа двух половинок должны совпадать (по диагонали). В данном примере я вижу только 3 связи. А именно: 6:5 - 5:4 (1), 5:4 - 4:3 (2) и 4:3 - 3:2 (3).
3:2 и 1:1 - не совпадают, 1:1 и 5:2 - тоже.
На всякий случай уточните условие задачи. Если, что обращайтесь.
0
D_in_practice
331 / 331 / 331
Регистрация: 02.10.2014
Сообщений: 666
10.12.2014, 04:06 #5
6 5 - 5 4 - 4 3 - 3 2 - 2 5
(2 5 и 5 2 это одна и та же костяшка Вы играли в домино?)
1 1 не понадобилась
1
pampam
0 / 0 / 0
Регистрация: 22.01.2014
Сообщений: 11
10.12.2014, 05:32  [ТС] #6
В этой задаче все таки длина цепочки должна получится пять, только я не могу понять какое условие, потому что я уже почти все условия перебрал и по сути они должны работать но нет.
0
19dmitry
33 / 33 / 22
Регистрация: 18.01.2014
Сообщений: 137
10.12.2014, 13:56 #7
Действительно, в примере всё верно, длина равна 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
66
#include<iostream>
using namespace std;
 
const int MAX = 28; // количество костяшек в наборе
 
struct num
{
    int num1;
    int num2;
};
 
int main()
{
    setlocale (LC_ALL, "RUSSIAN");
    int n;
    int k=1;
 
    do{
        cout << "ВВЕДИТЕ КОЛИЧЕСТВО КОСТЯШЕК: "; 
        cin >> n;
        if(n>28)
        {cout << "Число не должно превышать 28! ВВЕДИТЕ ЧИСЛО ВЕРНО!" << endl;}
    }while(n>28);
    cout << endl;
 
    num domino[MAX];
 
    for(int i=0; i<n; i++)
    {
        cout << i+1 << "-я костяшка: " << endl;
 
        do{
            cout << "1-половинка: "; cin >> domino[i].num1;
            if(domino[i].num1>6 || domino[i].num1<0)
            {cout << "Число должно находиться в пределах: 0-6. ВВЕДИТЕ ЧИСЛО ВЕРНО! " << endl;}
        }while(domino[i].num1>6 || domino[i].num1<0);
 
        do{
            cout << "2-половинка: "; cin >> domino[i].num2;
            if(domino[i].num2>6 || domino[i].num2<0)
            {cout << "Число должно находиться в пределах: 0-6. ВВЕДИТЕ ЧИСЛО ВЕРНО! " << endl;}
        }while(domino[i].num2>6 || domino[i].num2<0);
 
        cout << endl;
    }
 
    for(int i=0; i<n; i++)
    {
        if((domino[i-1].num1==domino[i].num1) || (domino[i-1].num1==domino[i].num2) || (domino[i-1].num2==domino[i].num1) || (domino[i-1].num2==domino[i].num2))
        {(k++);}
        else {
            for(int j=i; j<n; j++)
            {
                if((domino[i-1].num1==domino[j].num1) || (domino[i-1].num1==domino[j].num2) || (domino[i-1].num2==domino[j].num1) || (domino[i-1].num2==domino[j].num2))
                {(k++);}
            }
        }
    }
 
    cout << endl;
 
    cout << "ДЛИНА ЦЕПОЧКИ РАВНА: " << k << endl;
 
    system ("PAUSE");
    return 0;
}
0
10.12.2014, 13:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2014, 13:56
Привет! Вот еще темы с решениями:

Задача про календарь
Имеется задача: Два одноклассника Петя и Вася родились не ранее 1993 и не...

Задача про графы
помогите если не сложно Тексты нужно переписывать в тело сообщения!

задача про МКАД
Ребята,помогите решить задачу: Длина Московской кольцевой автомобильной дороги...

Задача про буквы
Условие задачи таково: изменить в строке все маленькие буквы на большие, всё...


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

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

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