@Fompi
Что-то делаю на Arduino

Почему C++ код работает неправильно?

Решал пробник на егэ, как обычно, решал задачи, но в этой задаче встал в ступор, почему код работает неправильно. Вроде бы на логику и алгоритмику несколько раз проверил. Но почему-то выводит все равно 8 (правильный ответ: 888) Господа эксперты, помогите, пожалуйста, школьнику, сдающему егэ(

P.S. Спустя некоторое время заметил, что идет какая-то "рандомизация", бывает код ничего не выводит, бывает выводит больше восьмерок и т.д., как так?

Мой код
#include <iostream>

using namespace std;

int main()
{
    int x, y, k, S = 0;
    bool flag = 1;
    short number[69];
    for(int i = 0; i < 69; i++) number[i] = 8;
    while (flag) {
        for(int i = 0; i < 69; i++) {
            if(number[i] == 3) {x++; y = 0;}
            else if(number[i] == 8) {y++; x = 0;}
            else {x = 0; y = 0; S++;}
            if(x == 4 || y == 4) {
                S = 0;
                if(number[i - 3] == 3 && number[i - 2] == 3 && number[i - 1] == 3 && number[i] == 3) {
                    number[i - 3] == 8; number[i - 2] == 8;
                    for(int m = i - 1; m < 67; m++) number[m] = number[m + 2];
                    k = k + 2;
                    for(int m = 69 - k; m < 69; m++) number[m] = 0;
                } else {
                    number[i - 3] == 3; number[i - 2] == 3;
                    for(int m = i - 1; m < 67; m++) number[m] = number[m + 2];
                    k = k + 2;
                    for(int m = 69 - k; m < 69; m++) number[m] = 0;
                }
                break;
            }
            if(S > 68) flag = 0;
        }
    }
    for(int i = 0; i < 69; i++) {
        if(number[i] != 0) cout << number[i];
    }

    return 0;
}


Скриншоты задания
635ede18899f3890577969.png
635edee7e2987871981061.png
  • Вопрос задан
  • 160 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Много ошибок:
1) number[i - 3] == 8; number[i - 2] == 8;, вопреки вашим ожиданиям, не присвоит значения в массиве значению 8. Тут выполняются 2 сравнения с 8, результат которых игнорируется.

2) Неинициализированные переменные. В частности, k, из-за чего происходит выход за границы массива.
Плюс, если x изначально окажется 3 (а она тоже не инициализирована), то после первой же 8 вы как бы найдете вхождение и тоже будете выходить за границы массива.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы