Код написан ниже.
Пример ввода:
4
x100+12mamba+11=barry-3
7x100-4barry=4
barry=x100-2mamba
4=2+2
Пример вывода:
barry=6
mamba=-1
x100=4
#include <iostream>
#include <map>
#include <string>
#include <set>
#include <vector>
#define abs(x) ((x)<0 ? -(x) : (x))
using namespace std;
typedef map<string, double> equation;
equation parseLine(const string &str, set<string> &vars) {
map<string, double> eqn;
bool left_part = true;
size_t i = 0;
while (i < str.length()) {
double n = 0;
bool isNeg = !left_part;
bool isCoeffOmitted = true;
string var = "";
if (str[i] == '='){
left_part = false;
i++;
continue;
}
if ((str[i] == '-') || (str[i] == '+'))
{
if (str[i] == '-') isNeg = !isNeg;
i += 1;
}
while ((i < str.length()) && (str[i] >= '0') && (str[i] <= '9')) {
n = 10 * n + (str[i] - '0');
isCoeffOmitted = false;
i++;
}
if ((i < str.length()) && (str[i] == '.')) {
int exp = 0;
i++;
while ((i < str.length()) && (str[i] >= '0') && (str[i] <= '9')){
n = 10 * n + (str[i] - '0');
exp++;
i++;
}
for (int j = 0; j < exp; n /= 10., j++);
}
while ((i < str.length()) && (str[i] != '+') && (str[i] != '=') && (str[i] != '-')){
var += str[i];
i++;
}
if (isCoeffOmitted) n = 1;
if (isNeg) n = -n;
eqn[var] += n;
vars.insert(var);
}
return eqn;
}
void GaussJordan(vector<equation> &eqns, const vector<string> &vars) {
for (size_t i = 0; i < vars.size(); i++) {
size_t j = i;
while ((j < eqns.size()) && (eqns[j][vars[i]] == 0))
j++;
if (j == eqns.size()) throw "Underdetermined system";
if (j != i) swap(eqns[i], eqns[j]);
double elem = eqns[i][vars[i]];
for (equation::iterator it = eqns[i].begin(); it != eqns[i].end(); it++)
it->second /= elem;
for (j = i + 1; j < eqns.size(); j++){
elem = eqns[j][vars[i]];
for (equation::iterator it = eqns[i].begin(); it != eqns[i].end(); it++)
eqns[j][it->first] -= elem * eqns[i][it->first];
}
}
for (size_t i = vars.size(); i < eqns.size(); i++)
for (equation::iterator it = eqns[i].begin(); it != eqns[i].end(); it++)
if (abs(it->second) > 1e-12) throw "No solutions";
for (size_t i = vars.size() - 1; i > 0; i--) {
for (size_t j = 0; j < i; j++) {
eqns[j][""] -= eqns[j][vars[i]] * eqns[i][""];
eqns[j][vars[i]] = 0;
}
}
}
void printAnswer(vector<equation> &eqns, vector<string> &vars) {
for (size_t i = 0; i < vars.size(); i++)
cout << vars[i] << "=" << -eqns[i][""] << endl;
}
int main() {
set<string> vars;
vector<equation> eqns;
size_t n = 0;
cin >> n;
for (size_t i = 0; i < n; i++) {
string t;
cin >> t;
eqns.push_back(parseLine(t, vars));
}
vars.erase("");
vector<string> vars_list(vars.begin(), vars.end());
try {
GaussJordan(eqns, vars_list);
}
catch (char const *e) {
cout << e;
return 1;
}
printAnswer(eqns, vars_list);
return 0;
}
Ответ:
7 так как нам нужно закодировать 76 элементов, а это больше чем 64 = 2^6, но меньше чем 2^7
<span>Язык: Pascal
</span>
Var
a,b:integer;
Begin
read(a,b);
write(a+b);
End.
<span>Язык C++
</span>
<span>#include <iostream>
using namespace std;
int main() {
int a,b;
cin >> a;
cin >> b;
cout << a+b;
return 0;
}
Язык JavaScript
var a = Number(prompt());
var b = Number(prompt());
alert(a+b); // или console.log(a+b);
ИЛИ
alert( Number(prompt()) + Number(prompt()) );
Язык Python
a = int(input())
b = int(input())
print(a+b)
ИЛИ
print( int(input()) + int(input()) )
</span>
Ввод для любой программы выше:
2
5
Вывод:
7
<em>Общ.утв - Все люди любят когда их хвалят Каждый человек на земле может путешевствоватьВсе животные имеют обмен веществ Частн.утв - Некоторые животные уже вымерлиНекоторые люди болеют раком Некоторые бабочки не могут летать из - за нехватки пыльцы на крыльях Обществ.сужНи один из людей не может слетать на солнце Ни один из животных не может говорить по человечьему языку (кроме попугая)Ни один из новорожденных детей не может бегать Частн.сужНекоторые компьютеры не являются рабочими Некоторые животные не являются вымершими</em><span><em>Некоторые люди не являются животноводами</em></span>