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

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

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

Пожалуйста, помогите срочно!! Желательно код, или помогите переделать задачу про домино ранее на этом сайте: Задача "Домино"

Набор домино состоит из прямоугольных костяшек, каждая из которых
разделена на две половинки линией, параллельной более короткой стороне. На
костяшках полного набора домино обозначены все возможные различные пары
чисел: (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
Ответы с готовыми решениями:

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

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

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

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

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

6
19dmitry
33 / 33 / 22
Регистрация: 18.01.2014
Сообщений: 138
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
Сообщений: 138
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
Сообщений: 138
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

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

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

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


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

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

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