Top.Mail.Ru
Ответы

Не могу решить 12 задание на C++ (из ЕГЭ по информатике). Помогите, пожалуйста!

Не использовать chat gpt! Он в данной ситуации помочь не смог.
Это задание на решу ЕГЭ информатика №47216 (извините, ссылку не пропускает антиспам).
Я написал для него код:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
 #include <iostream>
#include <string>
using namespace std;

bool nashlos(const string& str, const string& v) {
    auto res = str.find(v);
    if (res == string::npos) { return false; }
    else { return true; }
}

void samenit(string& str, const string& v, const string& w) {
    str.replace(str.find(v), v.size(), w);
}

bool prostoe_li(int num) {
    if (num < 2) { return false; }
    for (int i = 2; i < num; i++) {
        if (num % i == 0) {
            return false;
        }
    }
    return true;
}

int main()
{
    for (int n = 0; n <= 39; n++) {
        string str = ">";
        for (int i = 0; i < 39; i++) { str += '0'; }
        for (int i = 0; i < n; i++) { str += '1'; }
        for (int i = 0; i < 39; i++) { str += '2'; }

        while (nashlos(str, ">1") || nashlos(str, ">2") || nashlos(str, ">0")) {

            if (nashlos(str, ">1")) {
                samenit(str, ">1", "22>");
            }

            if (nashlos(str, ">2")) {
                samenit(str, ">2", "2>");
            }

            if (nashlos(str, ">0")) {
                samenit(str, ">0", "1>");
            }
        }
        samenit(str, ">", "");
        if (prostoe_li(stoi(str))) {
            cout << n << endl;
            break;
        }
        cout << str << endl;
    }
} 


В нём есть 2 найденные ошибки, которые я так и не смог решить:
1 - функция stoi(str) вызывает ошибку, хотя в строке str содержатся только цифры. Если нерешаемо, то я готов потом вручную найти простое число.
2 - Если закомментировать для избежания ошибки 1

1234
  /*if (prostoe_li(stoi(str))) {
            cout << n << endl;
            break;
        }*/ 

то числа выходят всё равно не те, и я вообще не понимаю, почему.
Помогите, пожалуйста!

По дате
По Рейтингу
Аватар пользователя
Новичок
123456789101112131415161718192021222324252627282930313233343536373839
 #include <iostream> 
#include <numeric> 
#include <string>

using namespace std;

bool is_prime(int num, int x = 2) { 
    if (x > num / 2) return true; 
    return num % x ? is_prime(num, ++x) : false; 
}

void replace_op(string& s) { 
    while (s.back() != '>') { 
        const auto a = s.find(">1"); 
        const auto b = s.find(">2"); 
        const auto c = s.find(">0"); 
        if (a != string::npos) s = s.replace(a, 2, "22>"); 
        else if (b != string::npos) s = s.replace(b, 2, "2>"); 
        else if (c != string::npos) s = s.replace(c, 2, "1>"); 
    } 
}

int find_n() { 
    static constexpr auto m = 39; 
    auto n = 0; 
    while (true) { 
        auto s = '>' + string(m, '0') + string(n, '1') + string(m, '2');
        replace_op(s); 
        auto k = -static_cast<int>(s.size() - 1) * '0'; 
        auto sum = accumulate(s.begin(), s.end() - 1, k); 
        if (is_prime(sum)) return n; 
        ++n; 
    } 
}

int main() { 
    const auto n = find_n(); 
    cout << n << '\n'; 
} 
Аватар пользователя
Мастер
3мес

слушай, у меня была похожая проблема с 12 заданием на c++. в итоге я нашла решение на курсе Умскул . они реально объясняют всё просто. попробуй разобрать ошибки, может там просто что-то с типами данных. мне это очень помогло, когда я запуталась. удачи!