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

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

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

Задача по программированию(неудачный перевод кода) - C++

01.11.2013, 16:00. Просмотров 379. Ответов 4
Метки нет (Все метки)

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

Общественности стало интересно, какую же систему счисления используют инопланетяне. Так как внеземная цивилизация была достаточно развита, чтобы отправить межпланетное сообщение, Накодилла предположил, что основание системы счисления довольно мало. Требуется написать программу, которая находит минимальное основание системы счисления, при котором данное равенство выполняется.

Формат входного файла

В единственной строке входных данных содержится равенство вида A + B = C. Строка не содержит пробелы, числа состоят из цифр от 0 до 9 и заглавных латинских букв от А до Z

Формат выходного файла

Требуется вывести единственное число – искомое основание системы счисления. Если такой системы счисления не существует, то вывести -1. Гарантируется, что ответ не превышает 36.

Пример:

Ввод:
2+2=4
Вывод:
5

К этой задаче я нашел код на алгоритмическом языке(КуМир) и попытался перевести на C++
Вот ссылка: http://gym1544.ru/EGE_GIA/dz211013.pdf
Оригинал:
Кликните здесь для просмотра всего текста

использовать Строки
лит A,B,C,Ф,стр
цел Ы,i,чис1,чис2,чис3,начсс,макс
лог усп
алг
нач
ввод A,B,C
стр:=A+B+C
макс:=0
нц для i от 1 до длин(стр)
если код(стр[i])>макс
то макс:=код(стр[i])
все
кц
Ф:=символ(макс)
начсс:=перевод1(Ф)+1
нц для i от начсс до 36
если найти(цел_в_лит(i),A)=-1
то
если длин(A)>1
то чис1:=перевод2(A,i)
иначе чис1:=перевод1(A)
все
если длин(B)>1
то чис2:=перевод2(B,i)
иначе чис2:=перевод1(B)
все
если длин(C)>1
то чис3:=перевод2(C,i)
иначе чис3:=перевод1(C)
все
если чис3=чис1+чис2
то вывод i; выход
все
все
кц
кон

{функция перевод2}
алг цел перевод2(арг лит стр,цел осн)
нач
лог усп, цел i, циф1, циф2
если стр[1]>="0" и стр[1]<="9"
то
циф1:=лит_в_цел(стр[1],усп)
иначе
циф1:=код(стр[1])-55
все
если стр[2]>="0" и стр[2]<="9"
то
циф2:=лит_в_цел(стр[2],усп)
иначе
циф2:=код(стр[2])-55
все
знач:=циф1*осн+циф2
кон

{функция перевод1}
алг цел перевод1(арг лит стр)
нач
лог усп, цел циф1
если стр[1]>="0" и стр[1]<="9"
то
циф1:=лит_в_цел(стр[1],усп)
иначе
циф1:=код(стр[1])-55
все
знач:=циф1
кон


"Мое" творчество:
Кликните здесь для просмотра всего текста
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
121
#include <iostream>
#include <string>
 
using namespace std;
 
int searchchar(char a, string b)
{
    for(int i=0; i<b.length(); ++i)
    {
        if (b[i]==a)
        {
            return i;
            break;
        }
    }
};
 
string slovo(string a, int b, int c)
{
    string d;
    for (int i=b; i<c; ++i)
    {
        d+=a[i];
    }
    return d;
};
 
int perevod1(string a)
{
    int num;
    if (((int)a[0]>=48)&&((int)a[0]<=57))
    {
        num=atoi(&a[0]);
    }
    else
    {
        num=(int)a[0]-55;
    }
    return num;
};
 
int perevod2(string str, int bas)
{
    int num_1, num_2;
    if (((int)str[0]>=48)&&((int)str[0]<=57))
    {
        num_1=atoi(&str[0]);
    }
    else
    {
        num_1=(int)str[0]-55;
    }
    if (((int)str[1]>=48)&&((int)str[1]<=57))
    {
        num_2=atoi(&str[1]);
    }
    else
    {
        num_2=(int)str[1]-55;
    }
    return num_1*bas+num_2;
};
 
 
int main()
{
    string A, B, C, str1, str, F;
    char c;
    int a1, a2, a3, bi, num1, num2, num3, start, maxnum;
    bool can;
    cin >> str1;
    a1=searchchar('+', str1);
    a2=searchchar('=', str1);
    A=slovo(str1, 1, a1);
    B=slovo(str1, a1+1, a2);
    C=slovo(str1, a2+1, str1.length());
    str=A+B+C;
    maxnum=0;
    for(int i=1; i<str.length(); ++i)
    {
        if ((i+'0')>maxnum)
        {
            maxnum=(i+'0');
        }
    }
    F=(char)maxnum;
    start=perevod1(F)+1;
    for (int i=start; i<36; ++i)
    {
        if(A.length()>1)
        {
            num1=perevod2(A, i);
        }
        else
        {
            num1=perevod1(A);
        }
        if(B.length()>1)
        {
            num2=perevod2(B, i);
        }
        else
        {
            num2=perevod1(B);
        }
        if(C.length()>1)
        {
            num3=perevod2(C, i);
        }
        else
        {
            num3=perevod1(C);
        }
        if (num3==(num1+num2))
        {
            cout << i;
            break;
        }
    }
    return 0;
}

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

Двумерная задача теплопроводности, перевод кода с Pascal на C++ - C++
Добрый день. По учебе, понадобилось первести код для решения двумерной задачи теплопроводности с Pascal на C++. Вот руководство ...

Задача по программированию - C++
Составить программу упорядочения элементов по убыванию во втором столбце матрицы A(N,N).

Задача по программированию - C++
Друзья, помогите с задачей по программированию. Дан массив t из 10 элементов, в каждом находится структура x в которой соответственно...

задача по программированию С++ - C++
Помогите пожалуйста написать задачу на C++ по фото . Задача B2

Олимпиадная задача по программированию - C++
Помогите написать программу для решения следующей задачи (из Всесибирской Открытой Олимпиады Школьников по информатике за 2011-2012 года): ...

Задача по программированию. Цикл For - C++
Написать программу, которая будет выводить на консоль значения факториала целых чисел из интервала от n1 до n2. Предвратительно написать...

4
Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
01.11.2013, 16:03 #2
ShiftDj, а какие ошибки выводит? Скопируйте
0
ShiftDj
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 36
01.11.2013, 16:29  [ТС] #3
Извиняюсь, не правильно выразился: код компилируется, но после ввода всегда выходит ошибка:
0
Миниатюры
Задача по программированию(неудачный перевод кода)  
ShiftDj
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 36
01.11.2013, 23:56  [ТС] #4
Не судите название строго просто надо было быстро скомпилировать код, вот так и назвал

Добавлено через 7 часов 26 минут
По сути, я решил... Но все равно программа проходит лишь 5 тестов из 8, уж не знаю почему...
Кликните здесь для просмотра всего текста
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <iostream>
#include <string>
using namespace std;
 
int searchchar(char a, string b)
{
    int c=0;
    for(int i=0; i<b.length(); ++i)
    {
        if (b[i]==a)
        {
            c=i;
        }
    }
    return c;
};
 
string slovo(string a, int b, int c)
{
    string d;
    for (int i=b; i<c; ++i)
    {
        d+=a[i];
    }
    return d;
};
 
int perevod1(string a)
{
    int num;
    if (((int)a[0]>=48)&&((int)a[0]<=57))
    {
        num=(int)a[0]-48;
    }
    else
    {
        num=(int)a[0]-55;
    }
    return num;
};
 
int perevod2(string str, int bas)
{
    int num_1, num_2;
    if (((int)str[0]>=48)&&((int)str[0]<=57))
    {
        num_1=(int)str[0]-48;
    }
    else
    {
        num_1=(int)str[0]-55;
    }
    if (((int)str[1]>=48)&&((int)str[1]<=57))
    {
        num_2=(int)str[1]-48;
    }
    else
    {
        num_2=(int)str[1]-55;
    }
    return num_1*bas+num_2;
};
 
int perevod3(char a)
{
    int num;
    if (((int)a>=48)&&((int)a<=57))
    {
        num=atoi(&a);
    }
    else
    {
        num=(int)a-55;
    }
    return num;
};
 
 
int main()
{
    string A, B, C, str1, str;
    char c, F;
    int a1, a2, bi, num1, num2, num3, start, maxnum;
    cin >> str1;
    a1=searchchar('+', str1);
    a2=searchchar('=', str1);
    A=slovo(str1, 0, a1);
    B=slovo(str1, a1+1, a2);
    C=slovo(str1, a2+1, str1.length());
    str=A+B+C;
    maxnum=0;
    for(int i=1; i<str.length(); ++i)
    {
        if ((str[i])>maxnum)
        {
            maxnum=(str[i]);
        }
    }
    F=maxnum;
    start=perevod3(F)+1;
    for (int i=start; i<36; ++i)
    {
        if(A.length()>1)
        {
            num1=perevod2(A, i);
        }
        else
        {
            num1=perevod1(A);
        }
        if(B.length()>1)
        {
            num2=perevod2(B, i);
        }
        else
        {
            num2=perevod1(B);
        }
        if(C.length()>1)
        {
            num3=perevod2(C, i);
        }
        else
        {
            num3=perevod1(C);
        }
        if (num3==(num1+num2))
        {
            cout << i;
            break;
        }
    }
    if (num3!=(num1+num2))
    {
        cout << -1;
    }
    return 0;
}
0
Хулиган
02.11.2013, 00:05     Задача по программированию(неудачный перевод кода)
  #5

Не по теме:

возможно здесь замешаны инопланетяне!?

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2013, 00:05
Привет! Вот еще темы с ответами:

Задача с технокубка по программированию - C++
Лайнландия состоит из n городов, которые расположены на оси Ox. Координата i-го из городов равна xi. Поликарп прошел от одного города...

Геометрическая задача по программированию (C++) - C++
Здравствуйте. Дали такое вот задание по программированию, реализовывать нужно на плюсах, но есть некоторое недопонимание того, что...

Шарики(Задача по олимпиадному программированию) - C++
Решение(не идеально,я знаю): #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt; using namespace std; int main(){ ...

задача по программированию пожалуйста с++(масив) - C++


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

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

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