Другие языки программирования и технологии

30 чтобы получилось использовать 1,3,5,7,9,11,13,15

Shakir Chshinchir
Shakir Chshinchir
142
15+13+2
Игорь Шечков
Игорь Шечков
2 885
Лучший ответ
Сергей Леонтьев а где число 2 в списке предложенных?
Это старая шутка, когда давали карточки с данными числами и предлагалось заполнить ТРИ места в формуле __+__+__=30, нужно было догадаться перевернуть карточку 9, чтобы получилось 6
#include < iostream >
#include < string >
#include < vector >
#include < sstream >
#include < map >
#include < functional >

using namespace std;

int main()
{
setlocale(LC_ALL, "rus");
system("color 0A");
vector < string > dig;
dig.push_back("1");
dig.push_back("3");
dig.push_back("5");
dig.push_back("7");
dig.push_back("9");
dig.push_back("11");
dig.push_back("13");
dig.push_back("15");
dig.push_back("");
vector < string > StSt;
for (unsigned a = 0; a < 9; ++a)
{
for (unsigned b = 0; b < 9; ++b)
{
for (unsigned c = 0; c < 9; ++c)
{
for (unsigned d = 0; d < 9; ++d)
{
for (unsigned e = 0; e < 9; ++e)
{
for (unsigned f = 0; f < 9; ++f)
{
for (unsigned g = 0; g < 9; ++g)
{
for (unsigned h = 0; h < 9; ++h)
{
for (unsigned i = 0; i < 9; ++i)
{
stringstream ss;
ss << dig[a];
if (dig[a] != "") ss << "+";
ss << dig[b];
if (dig[b] != "") ss << "+";
ss << dig[c];
if (dig[c] != "") ss << "+";
ss << dig[d];
if (dig[d] != "") ss << "+";
ss << dig[e];
if (dig[e] != "") ss << "+";
ss << dig[f];
if (dig[f] != "") ss << "+";
ss << dig[g];
if (dig[g] != "") ss << "+";
ss << dig[h];
if (dig[h] != "") ss << "+";
ss << dig[i];
string str;
ss >> str;
StSt.push_back(str);
}
}
}
}
}
}
}
}
}

auto Summ = [](int tt1, int tt2) -> int {return tt1 + tt2; };
map < char, function < int(int, int) > > oper_map = {
{ '+', Summ },
};
cout << "Подходящие выражения" << endl;
unsigned sum_ = 0;
for (unsigned u = 0; u < StSt.size(); ++u)
{
stringstream ss(StSt[u]);
int f;
ss >> f;
ss.clear();
for (; ss.rdbuf()->in_avail() != 0;)
{
int te;
char opp;
ss >> opp >> te;
f = oper_map[opp](f, te);
}
if (f == 30)
{
cout << StSt[u] << " = 30" << endl;
++sum_;
}
}
cout << "Итого из " << StSt.size() << " возможных комбинаций, только " << sum_ << " дало в результате вычислений 30" << endl;
cout << "Что составляет " << 100 * (float)sum_ / StSt.size() << "%" << endl;
cin.get(); cin.get();
return 0;
}
9+7+3+11
11+9+7+3
EE
Elsen Emiraslanov
104