Не могу решить 12 задание на C++ (из ЕГЭ по информатике). Помогите, пожалуйста!
Не использовать chat gpt! Он в данной ситуации помочь не смог.
Это задание на решу ЕГЭ информатика №47216 (извините, ссылку не пропускает антиспам).
Я написал для него код:
#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
/*if (prostoe_li(stoi(str))) {
cout << n << endl;
break;
}*/
то числа выходят всё равно не те, и я вообще не понимаю, почему.
Помогите, пожалуйста!
#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';
}
слушай, у меня была похожая проблема с 12 заданием на c++. в итоге я нашла решение на курсе Умскул . они реально объясняют всё просто. попробуй разобрать ошибки, может там просто что-то с типами данных. мне это очень помогло, когда я запуталась. удачи!