Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 01.08.2020
Сообщений: 35

В выражении вместо каждого знака ? поставить знак одной из операций +, -, *, / так, чтобы результат был 35...

17.10.2021, 21:24. Показов 1371. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В выражении ((((1 ? 2) ? 3) ? 4) ? 5) ? 6 вместо каждого знака ? поставить знак одной из операций +, -, *, / так, чтобы результат вычислений был равен 35.
Вообщем что сделал я, я написал программу просто перебирающую комбинации. Но мне нужно подсчитывать результат и выводить соответствующую ему комбинацию. Проблема в том, что нельзя использовать никакие библиотеки связанные со строками такие как стринг и прочие.Условия можно и массивы. Это реально как то сделать через массивы?
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
#include <iostream>
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;
                    }
                }
            }
        }
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.10.2021, 21:24
Ответы с готовыми решениями:

В выражении вместо каждого знака вопрос записать знак одной из арифметических операций
Ребят, помогите решить.. У самого идей вообще нет.. Подозреваю, что рекурсией, но хз как) Буду рад за любые советы т.д.) А лучше еще за...

Вместо каждого знака ? Вставить знак одной из 4 арифметических операций
Задание: В написанном выражении ((((1?2)?3)?4)?5)?6 вместо каждого знака ? вставить знак одной из 4 арифметических операций +,-,*,/ так,...

Вставить между цифрами 1, 2, 3, 4, 9 знак одной из операций +-*/, так, чтобы результат 8-операций равнялся 100
Вставить между цифрами 1,2,3,4...9 знак одной из операций +-*/, так, чтобы результат 8-опреаций равнялся 100. Имеется 8 решений....

12
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6206 / 2903 / 1044
Регистрация: 01.06.2021
Сообщений: 10,701
17.10.2021, 21:26
RageGen, а что это не помогло Занимательная задача ?
0
0 / 0 / 0
Регистрация: 01.08.2020
Сообщений: 35
17.10.2021, 21:28  [ТС]
Нет, библиотека со строками под запретом.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6206 / 2903 / 1044
Регистрация: 01.06.2021
Сообщений: 10,701
17.10.2021, 21:32
Цитата Сообщение от RageGen Посмотреть сообщение
Нет, библиотека со строками под запретом.
так не пользуйся ей
0
0 / 0 / 0
Регистрация: 01.08.2020
Сообщений: 35
17.10.2021, 21:44  [ТС]
Я, к сожалению не очень понимаю, как я здесь без неё могу обойтись. И переписать вообще решение ваше или своё. Мне нужно, чтоб все ещё находилось в пределах, одной функции main.

Добавлено через 9 минут
Был бы благодарен, если бы вы помогли.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6206 / 2903 / 1044
Регистрация: 01.06.2021
Сообщений: 10,701
17.10.2021, 21:51
RageGen, тот код отличный, только поменять 25 на 35

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <string>
    
void f(int i, int r, std::string s) {
    if (i>6) { if (r==35) std::cout << s << "=35\n"; return; }
    f(i+1, r+i, "("+s+"+"+std::to_string(i)+")");
    f(i+1, r-i, "("+s+"-"+std::to_string(i)+")");
    f(i+1, r*i, "("+s+"*"+std::to_string(i)+")");
    f(i+1, r/i, "("+s+"/"+std::to_string(i)+")");
}
 
int main() { f(1, 1, "1"); }
Добавлено через 42 секунды
Цитата Сообщение от RageGen Посмотреть сообщение
тоб все ещё находилось в пределах, одной функции main.
это будет некрасиво
0
0 / 0 / 0
Регистрация: 01.08.2020
Сообщений: 35
17.10.2021, 21:52  [ТС]
И опять с библиотекой строк. Спасибо, что услышали меня!

Добавлено через 1 минуту
Вы понимаете, что мне плевать, как это будет выглядеть? От меня это требует условие, чтобы все находилось в одной функции, понимаете?
0
458 / 294 / 191
Регистрация: 23.06.2018
Сообщений: 678
17.10.2021, 22:30
Цитата Сообщение от RageGen Посмотреть сообщение
Вы понимаете, что мне плевать
Так нам не всё равно, понимаете? Cмысл жизни теряется когда пишешь другим некрасивый код, понимаете?
Без библиотеки строк как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
void f(int i, int r, char str[]) {
    if (i > 6) { if (r == 35) std::cout << str << std::endl; return; }
    int pos;
    for (pos = 0; str[pos] != '?'; pos++);
    str[pos] = '+'; f(i + 1, r + i, str);
    str[pos] = '-'; f(i + 1, r - i, str);
    str[pos] = '*'; f(i + 1, r * i, str);
    str[pos] = '/'; f(i + 1, r / i, str);
    str[pos] = '?';
}
 
int main() { 
    char str[] = "((((1?2)?3)?4)?5)?6=35";
    f(2, 1, str);
}
А это вот набросал другой вариант, где всё лежит в main:
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
#include <iostream>
 
int main() {
    const int n = 5;
    uint8_t ops[n] = {};
    while (ops[0] != 4) {
        int result = 1;
        for (int i = 0; i < n; i++) {
            switch (ops[i]) {
            case 0: result += i + 2; break;
            case 1: result -= i + 2; break;
            case 2: result *= i + 2; break;
            case 3: result /= i + 2; break;
            }
        }
        if (result == 35) {
            std::cout << "((((1";
            for (int i = 0; i < n; i++) {
                char op = '?';
                switch (ops[i]) {
                case 0: op = '+'; break;
                case 1: op = '-'; break;
                case 2: op = '*'; break;
                case 3: op = '/'; break;
                }
                std::cout << op << i + 2;
                if (i != n - 1) std::cout << ")";
            }
            std::cout << "=35" << std::endl;
        }
        ops[n - 1]++;
        for (int i = n - 1; i > 0 && ops[i] == 4; i--) {
            ops[i] = 0;
            ops[i - 1]++;
        }
    }
}
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
17.10.2021, 23:56
Вариант менее интересный, чем у уважаемого Bleach163, и уж конечно значительно менее интересный, чем у уважаемого Royal_X, зато куда более простой.

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
#include <iostream>
#include <cmath>
 
int main() {
    const int N = 35;
    for (int id = 0; id < 1024; ++id) {
        double result = 1;
        for (int i = 2, _id = id; i < 7; ++i, _id /= 4) {
            switch (_id % 4) {
                case 0: result += i; break;
                case 1: result -= i; break;
                case 2: result *= i; break;
                case 3: result /= i; break;
            }
        }
        if (std::fabs(result - N) < 0.000001) { // если и cmath вам слишком сложен, напишите тут "if (result == N) {"
            std::cout << "((((((1";
            for (int i = 2, _id = id; i < 7; ++i, _id /= 4) {
                switch (_id % 4) {
                    case 0: std::cout << "+"; break;
                    case 1: std::cout << "-"; break;
                    case 2: std::cout << "*"; break;
                    case 3: std::cout << "/"; break;
                }
                std::cout << i << ")";
            }
            std::cout << " = " << result << std::endl;
        }
    }
    return 0;
}
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6206 / 2903 / 1044
Регистрация: 01.06.2021
Сообщений: 10,701
17.10.2021, 23:58
Цитата Сообщение от lemegeton Посмотреть сообщение
чем у уважаемого Royal_X
дабы не было заблуждений, тот замечательный код был написан https://www.cyberforum.ru/members/356548.html, а не мной
1
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
17.10.2021, 23:59
Цитата Сообщение от Royal_X Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <string>
void f(int i, int r, std::string s) {
    if (i>6) { if (r==35) std::cout << s << "=35\n"; return; }
    f(i+1, r+i, "("+s+"+"+std::to_string(i)+")");
    f(i+1, r-i, "("+s+"-"+std::to_string(i)+")");
    f(i+1, r*i, "("+s+"*"+std::to_string(i)+")");
    f(i+1, r/i, "("+s+"/"+std::to_string(i)+")");
}
int main() { f(1, 1, "1"); }
Очень интересное решение рекурсией. Заметил на выходе
Code
1
2
3
4
5
6
7
((((((1-1)+2)*3)*4)+5)+6)=35
((((((1*1)+2)+3)*4)+5)+6)=35
((((((1*1)+2)*3)*4)+5)-6)=35
((((((1*1)*2)*3)*4)+5)+6)=35
((((((1/1)+2)+3)*4)+5)+6)=35
((((((1/1)+2)*3)*4)+5)-6)=35
((((((1/1)*2)*3)*4)+5)+6)=35
что, единички повторяются. Нестрашно, конечно ибо что 1*1 == 1 и 1 / 1 == 1, но забавно.
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
18.10.2021, 00:02
Там просто надо с двойкой функцию вызвать и все. Я спешил и не заметил эту опечатку. Bleach163 это кстати заметил и в своем варианте сделал.
0
18.10.2021, 00:17

Не по теме:


Цитата Сообщение от RageGen Посмотреть сообщение
Вы понимаете, что мне плевать, как это будет выглядеть? От меня это требует условие, чтобы все находилось в одной функции, понимаете?
Не стоит проявлять пассивную агрессию. Тут все заинтересованы вам помочь.
Ведь чем меньше вы понимаете, тем ценнее настоящие специалисты.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.10.2021, 00:17
Помогаю со студенческими работами здесь

Вставить между цифрами 1, 2,..., 8, 9 в данном порядке, знак одной из 4-х арифметических операций так, чтобы результат восьми послед-х операций =100
Вычисления проводятся слева-направо, ни одна операция не имеет приоритета. Добавлено через 2 минуты задача вынесла моск, прошу помочь

В выражении расставить знаки так, чтобы результат вычислений был равен 35
В выражении (((( 1 ? 2 ) ? 3 ) ? 4 ) ? 5 ) ? 6 вместо каждого знака ? поставить знак одной из операций + , - , * , / так , чтобы...

В заданном выражении вместо знаков "?" подставить знак арифм. операции, чтобы результат равнялся 35
В написанном выражении ((((1?2)?3)?4)?5)?6 вместо каждого знака «?» вставить знак одной из четырех арифметических операций +, –, ?, / так,...

В выражении вместо "?" вставить знак одного из четырех арифметических действий, чтобы результат вычислений равнялся 35
рекурсия В написанном выражении ((((1 ? 2) ? 3) ? 4) ? 5) ? 6 вместо каждого знака &quot;?&quot; вставить знак одного из четырех арифметических...

Расставить знаки операций между тремя числами так, чтобы результат вычисления выражения был минимальным
Вы наверняка уже знаете, что Алексей — серьёзный математик, и он любит решать серьёзные задачи. Вот ещё одна из этих задач. Даны три...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru