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

Задача по Олимпиаде - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
castielblak
0 / 0 / 0
Регистрация: 25.10.2012
Сообщений: 6
25.10.2012, 16:31     Задача по Олимпиаде #1
Здравствуйте )
Буквально два дня назад написал Олимпиаду по программированию (Школьный этап).
Было всего 3 задачи . 2 задачи я решил , но 3 так и не смог.
Хотелось бы увидеть решение этой задачи.

Задача №3
Собственно 3 задача.

Задача "Инопланетянин"

Во время эксперимента Накодиллы было случайно получено сообщение инопланетян , содержащее формулу вида A + B = C.
Общественности стало интересно , какую же систему счисления использую инопланетяне. Так как внеземная цивилизация была достаточно развита, чтобы отправить межпланетное сообщение , Накодилла предположил, что основание системы счисления довольно мало. Требуется написать программу, которая находит минимальное основание системы счисления, при котором данное равенство выполняется.

ФОРМАТ ВВОДА :
В единственной строке входных данных содержится три числа A , B и C. Числа состоят из цифр от 0 до 9 и заглавных латинских букв от A до Z.

ФОРМАТ ВЫВОДА :
Требуется вывести единственное число - искомое основание системы счисления. Если такой системы счисления не существует , то вывести -1. Гарантируется, что ответ не превышает 36.


Пример ввода : 2 2 4
Пример вывода : 5

Пример ввода : 1A 2 20
Пример вывода : 12

Очень жду вашей помощи на С++ )
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Biggs
16 / 10 / 0
Регистрация: 12.03.2011
Сообщений: 52
25.10.2012, 18:01     Задача по Олимпиаде #2
Берешь тридцать шесть систем
И перебираешь с начала
Первая совпадающая с ответом будет твоя-))
castielblak
0 / 0 / 0
Регистрация: 25.10.2012
Сообщений: 6
25.10.2012, 19:47  [ТС]     Задача по Олимпиаде #3
Цитата Сообщение от Biggs Посмотреть сообщение
Берешь тридцать шесть систем
И перебираешь с начала
Первая совпадающая с ответом будет твоя-))
Хотелось бы посмотреть на код )
Mr.X
Эксперт С++
 Аватар для Mr.X
2798 / 1574 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
25.10.2012, 20:26     Задача по Олимпиаде #4
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
//////////////////////////////////////////////////////////////////////////////////////////////
#include <cstdlib>
#include <iostream>
#include <sstream>
#include <string>
//////////////////////////////////////////////////////////////////////////////////////////////
typedef std::string     T_str;
//////////////////////////////////////////////////////////////////////////////////////////////
bool  successfully_get_val_from_str_with_base
    (
        const T_str&    s,
        int             base,
        int&            val
    )
{
    char    *end    =   0;
    val             =   strtol
                            ( 
                                s.c_str(), 
                                &end, 
                                base 
                            );
 
    return      !s.empty()
            &&  *end    ==  0;
}
//////////////////////////////////////////////////////////////////////////////////////////////
int  get_min_base
    ( 
        const T_str&    L,
        const T_str&    R,
        const T_str&    SUM
    )
{
    const int   EMPTY_BASE  =   -1;
    const int   BASE_MIN    =   2;
    const int   BASE_MAX    =   36;
 
    int     val_L       =   0;
    int     val_R       =   0;
    int     val_SUM     =   0;
 
    for(int  base = BASE_MIN; base <= BASE_MAX; ++base)
    {
        if  (
                    successfully_get_val_from_str_with_base ( L,    base,   val_L       )
                &&  successfully_get_val_from_str_with_base ( R,    base,   val_R       )
                &&  successfully_get_val_from_str_with_base ( SUM,  base,   val_SUM     )
 
                &&  val_L + val_R == val_SUM
            )
        {
            return  base;
        }
    }
    return  EMPTY_BASE;
}
//////////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
 
    for(;;)
    {
        T_str   A;
        T_str   B;
        T_str   C;
 
        char    c   =   0;
        
        bool    str_is_correct    =   false;
 
        do
        {
            std::cout   <<  "Введите два слагаемые и сумму в некоторой системе счисления в одной строке:"
                        <<  std::endl;
            T_str   s;
 
            getline
                (
                    std::cin,
                    s
                );
 
            std::istringstream  ssin(s);
 
            ssin    >>  A;
            ssin    >>  B;
            ssin    >>  C;
            str_is_correct    =         !A.empty()
                                    &&  !B.empty()
                                    &&  !C.empty()
                                    &&  (ssin    >>  c)     ==  0;
        }while  ( !str_is_correct );
 
        std::cout   <<  get_min_base( A, B, C )
                    <<  std::endl
                    <<  std::endl
                    <<  std::endl;
    }//for
}
yleart
 Аватар для yleart
60 / 45 / 1
Регистрация: 07.10.2011
Сообщений: 139
25.10.2012, 21:01     Задача по Олимпиаде #5
Поможет
http://www.cyberforum.ru/blogs/18334/blog96.html
castielblak
0 / 0 / 0
Регистрация: 25.10.2012
Сообщений: 6
25.10.2012, 23:03  [ТС]     Задача по Олимпиаде #6
Цитата Сообщение от Mr.X Посмотреть сообщение
...
Спасибо большое за код)
Цитата Сообщение от yleart
Так же спасибо за отличную статью )
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
26.10.2012, 06:00     Задача по Олимпиаде #7
castielblak, Меня несколько смущает отсутствие ограничений на длину чисел.
castielblak
0 / 0 / 0
Регистрация: 25.10.2012
Сообщений: 6
28.10.2012, 16:35  [ТС]     Задача по Олимпиаде #8
Цитата Сообщение от soon Посмотреть сообщение
castielblak, Меня несколько смущает отсутствие ограничений на длину чисел.
Да (
Могу прислать вам даже фото с заданиями , я списал текст задачи под копирку.
Задание тяжелое для школьного этапа , хотя )
Не мне судить )
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
28.10.2012, 16:39     Задача по Олимпиаде #9
Задание тяжелое для школьного этапа
Да не особо.
Kgfq
28.10.2012, 16:48
  #10

Не по теме:

Mr.X, что за жесть у вас с табуляцией?

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2012, 16:49     Задача по Олимпиаде
Еще ссылки по теме:

Подготовка к олимпиаде C++

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

Или воспользуйтесь поиском по форуму:
castielblak
0 / 0 / 0
Регистрация: 25.10.2012
Сообщений: 6
28.10.2012, 16:49  [ТС]     Задача по Олимпиаде #11
Цитата Сообщение от soon Посмотреть сообщение
Да не особо.

Дальше все равно прошел )
Решать логические задачи теперь для закрепления )
Yandex
Объявления
28.10.2012, 16:49     Задача по Олимпиаде
Ответ Создать тему
Опции темы

Текущее время: 07:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru