В выражении ((((1? 2) ? 3) ? 4) ? 5) ? 6 вместо каждого знака? поставить знак одной из операций +, -*, / так, чтобы результат вычислений был равен 35.
Вообщем что сделал я, я написал программу просто перебирающую комбинации. Но мне нужно подсчитывать результат и выводить соответствующую ему комбинацию. Проблема в том, что нельзя использовать никакие библиотеки связанные со строками такие как стринг и прочие. Условия можно и массивы. Это реально как то сделать через массивы?
А также все должно быть внутри функции main
#include
using namespace std;
int main()
{
char mas1[4]{'/','+','-','*'};
char mas2[4]{'/','+','-','*'};
char mas3[4]{'/','+','-','*'};
char mas4[4]{'/','+','-','*'};
char mas5[4]{'/','+','-','*'};
for (int a=0; a<4; a++)
{
for (int b=0; b<4; b++)
{
for (int c=0; c<4; c++)
{
for (int d=0; d<4; d++)
{
for (int e=0; e<4; e++)
{
cout<<"((((1";
cout<<mas1[a];
cout<<"2)";
cout<<mas2[b];
cout<<"3)";
cout<<mas3[c];
cout<<"4)";
cout<<mas4[d];
cout<<"5)";
cout<<mas5[e];
cout<<"6";
cout<<endl;
}
}
}
}
}
}
C/C++
Задача на с++ связанная с расстановкой знаков
Я же тебе в комментариях к своему рекурсивному ответу уже предлагал решение с массивами, циклами и только main:
int main() {
char res[] = "((((1?2)?3)?4)?5)?6\n";
int val[6] = {1};
for (int i = 0; i < 1024; ++i) {
for (int j = 0, k = i; j < 5; ++j, k >>= 2) {
switch(k & 3) {
case 0: res[5 + j * 3] = '+'; val[j + 1] = val[j] + (j + 2); break;
case 1: res[5 + j * 3] = '-'; val[j + 1] = val[j] - (j + 2); break;
case 2: res[5 + j * 3] = '*'; val[j + 1] = val[j] * (j + 2); break;
case 3: res[5 + j * 3] = '/'; val[j + 1] = val[j] / (j + 2); break;
}
}
if (val[5] == 35) { cout << res; }
}
}
Если делать по твоему шаблону и без функций, то получится крайне громоздко. Что-то вроде такого:
int main() {
char mas[4] { '+','-','*','/' } ;
int res[5];
for (int a=0; a<4; a++) {
switch (mas[a]) {
case '+': res[0] = 1 + 2; break;
case '-': res[0] = 1 - 2; break;
case '*': res[0] = 1 * 2; break;
case '/': res[0] = 1 / 2; break;
}
for (int b=0; b<4; b++) {
switch (mas[b]) {
case '+': res[1] = res[0] + 3; break;
case '-': res[1] = res[0] - 3; break;
case '*': res[1] = res[0] * 3; break;
case '/': res[1] = res[0] / 3; break;
}
for (int c=0; c<4; c++) {
switch (mas[c]) {
case '+': res[2] = res[1] + 4; break;
case '-': res[2] = res[1] - 4; break;
case '*': res[2] = res[1] * 4; break;
case '/': res[2] = res[1] / 4; break;
}
for (int d=0; d<4; d++) {
switch (mas[d]) {
case '+': res[3] = res[2] + 5; break;
case '-': res[3] = res[2] - 5; break;
case '*': res[3] = res[2] * 5; break;
case '/': res[3] = res[2] / 5; break;
}
for (int e=0; e<4; e++) {
switch (mas[e]) {
case '+': res[4] = res[3] + 6; break;
case '-': res[4] = res[3] - 6; break;
case '*': res[4] = res[3] * 6; break;
case '/': res[4] = res[3] / 6; break;
}
if (res[4] == 35) {
cout<<"((((1"<<mas[a]<<"2)"<<mas[b]<<"3)"<<mas[c]<<"4)"<<mas[d]<<"5)"<<mas[e]<<"6"<<endl;
}
}
}
}
}
}
}
int main() {
char res[] = "((((1?2)?3)?4)?5)?6\n";
int val[6] = {1};
for (int i = 0; i < 1024; ++i) {
for (int j = 0, k = i; j < 5; ++j, k >>= 2) {
switch(k & 3) {
case 0: res[5 + j * 3] = '+'; val[j + 1] = val[j] + (j + 2); break;
case 1: res[5 + j * 3] = '-'; val[j + 1] = val[j] - (j + 2); break;
case 2: res[5 + j * 3] = '*'; val[j + 1] = val[j] * (j + 2); break;
case 3: res[5 + j * 3] = '/'; val[j + 1] = val[j] / (j + 2); break;
}
}
if (val[5] == 35) { cout << res; }
}
}
Если делать по твоему шаблону и без функций, то получится крайне громоздко. Что-то вроде такого:
int main() {
char mas[4] { '+','-','*','/' } ;
int res[5];
for (int a=0; a<4; a++) {
switch (mas[a]) {
case '+': res[0] = 1 + 2; break;
case '-': res[0] = 1 - 2; break;
case '*': res[0] = 1 * 2; break;
case '/': res[0] = 1 / 2; break;
}
for (int b=0; b<4; b++) {
switch (mas[b]) {
case '+': res[1] = res[0] + 3; break;
case '-': res[1] = res[0] - 3; break;
case '*': res[1] = res[0] * 3; break;
case '/': res[1] = res[0] / 3; break;
}
for (int c=0; c<4; c++) {
switch (mas[c]) {
case '+': res[2] = res[1] + 4; break;
case '-': res[2] = res[1] - 4; break;
case '*': res[2] = res[1] * 4; break;
case '/': res[2] = res[1] / 4; break;
}
for (int d=0; d<4; d++) {
switch (mas[d]) {
case '+': res[3] = res[2] + 5; break;
case '-': res[3] = res[2] - 5; break;
case '*': res[3] = res[2] * 5; break;
case '/': res[3] = res[2] / 5; break;
}
for (int e=0; e<4; e++) {
switch (mas[e]) {
case '+': res[4] = res[3] + 6; break;
case '-': res[4] = res[3] - 6; break;
case '*': res[4] = res[3] * 6; break;
case '/': res[4] = res[3] / 6; break;
}
if (res[4] == 35) {
cout<<"((((1"<<mas[a]<<"2)"<<mas[b]<<"3)"<<mas[c]<<"4)"<<mas[d]<<"5)"<<mas[e]<<"6"<<endl;
}
}
}
}
}
}
}
#include < iostream >
using namespace std;
void fuu(int **massiv, int number)
{
int result=1; //перая циферь уравнения
for (int var = 0; var < 5; var++)
{
switch (massiv[number][var])
{
case 0: result += (var + 2); break;
case 1: result -= (var + 2); break;
case 2: result *= (var + 2); break;
case 3: result /= (var + 2); break;
}
}
massiv[number][5] = result;
}
int main()
{
int** massiv = new int* [1024]; // массив для хранения всех вариантов
for (int i = 0; i < 1024; i++)
massiv[i] = new int[6]{ 0 }; // 5 элементов для операции и 1 для хранения результата
int i = 0;
for (int j0 = 0; j0 < 4; j0++)
for (int j1 = 0; j1 < 4; j1++)
for (int j2 = 0; j2 < 4; j2++)
for (int j3 = 0; j3 < 4; j3++)
for (int j4 = 0; j4 < 4; j4++)
{
massiv[i][0] = j0;
massiv[i][1] = j1;
massiv[i][2] = j2;
massiv[i][3] = j3;
massiv[i][4] = j4;
i++;
}
for (int i=0; i<1024; i++) fuu(massiv, i);
for (int i = 0; i < 1024; i++)
{
if (massiv[i][5] == 35) cout << massiv[i][0] << " " <<
massiv[i][1] << " " <<
massiv[i][2] << " " <<
massiv[i][3] << " " <<
massiv[i][4] << " " << endl;
}
return 0;
}
using namespace std;
void fuu(int **massiv, int number)
{
int result=1; //перая циферь уравнения
for (int var = 0; var < 5; var++)
{
switch (massiv[number][var])
{
case 0: result += (var + 2); break;
case 1: result -= (var + 2); break;
case 2: result *= (var + 2); break;
case 3: result /= (var + 2); break;
}
}
massiv[number][5] = result;
}
int main()
{
int** massiv = new int* [1024]; // массив для хранения всех вариантов
for (int i = 0; i < 1024; i++)
massiv[i] = new int[6]{ 0 }; // 5 элементов для операции и 1 для хранения результата
int i = 0;
for (int j0 = 0; j0 < 4; j0++)
for (int j1 = 0; j1 < 4; j1++)
for (int j2 = 0; j2 < 4; j2++)
for (int j3 = 0; j3 < 4; j3++)
for (int j4 = 0; j4 < 4; j4++)
{
massiv[i][0] = j0;
massiv[i][1] = j1;
massiv[i][2] = j2;
massiv[i][3] = j3;
massiv[i][4] = j4;
i++;
}
for (int i=0; i<1024; i++) fuu(massiv, i);
for (int i = 0; i < 1024; i++)
{
if (massiv[i][5] == 35) cout << massiv[i][0] << " " <<
massiv[i][1] << " " <<
massiv[i][2] << " " <<
massiv[i][3] << " " <<
massiv[i][4] << " " << endl;
}
return 0;
}
Сергей Губин
Выдает код из 5 разрядов соответствующий нужным знакам, где 0 - плюс, 1 - минус, 2 - умножить, 3 - разделить.
в программе 1024 - число вариаций из 5 знаков по 4 варианта каждый т. е. 4 в пятой степени.
в программе 1024 - число вариаций из 5 знаков по 4 варианта каждый т. е. 4 в пятой степени.
Похожие вопросы
- Решите задачу на любом языке. Желательно на с++.
- Задачу написать на с++ , она не сложная но почему то не получается напишите задачу с помощью цикла
- Решите задачу на с++, или хотя бы скажите идею как это вообще решать пожалуйста.
- Решите задачу на любом языке, или хотя бы скажите идею как это вообще решать пожалуйста.
- СРОЧНО! Помогите с задачей.
- Помогите с кодом задачи c++. задача на фото
- Задача по программированию. Решить на Python или C++
- Помогите решить задачу по программированию на C++
- Можете подсказать по задаче или дать алгоритм задачи, код опять же не нужен
- Решите, пожалуйста, задачу на c++
В описании написано что & побитно сравнивает два значения и возвращает либо 1 либо 0. А у вас в свиче фактически выходит 0...3, как так?