В алгоритме не происходит подсчет. Как можно это исправить и в чем могут быть причины проблемы?

Я не могу понять, почему не происходит корректного подсчета, на самом деле он не работает так, как было задумано. Задача является учебной, поэтому способы решения существенно ограничены (нельзя использовать vector, string и указатели). В чем может быть проблема? <br/> Я прикрепляю файл и фото с задачей и моим решением. <br/> Нужно разработать программу, которая определяет, содержится ли в числе последовательность цифр “777”. <br/>
  • 27 сентября 2024 г. 17:33
Ответы на вопрос 2
Ваша проблема может быть вызвана несколькими факторами. Хотя я не могу просмотреть ваш файл и фото, я могу предложить некоторые потенциальные причины, по которым ваш алгоритм может не выполнять подсчет корректно, а также предложить общее решение для задачи.

### Возможные причины проблемы:
1. **Неправильная проверка последовательности**: Убедитесь, что вы правильно проверяете, содержит ли число последовательность "777". Если у вас есть циклы или условия, которые не проверяют все цифры, это может быть причиной.
   
2. **Тип данных**: Поскольку вы упомянули, что не можете использовать `vector`, `string` и указатели, вы можете использовать только базовые типы данных, такие как `int` и `char`. Убедитесь, что вы правильно обрабатываете количество цифр в числе.

3. **Алгоритм**: Возможно, алгоритм не обрабатывает все возможные входные данные. Убедитесь, что программа проверяет каждую цифру на возможность формирования последовательности "777".

### Пример простого алгоритма:
Вот пример кода на C++, который проверяет, содержится ли в числе последовательность "777", без использования `vector` и `string`.

```cpp
#include <iostream>

int main() {
    long long number; // Используем long long для работы с большими числами
    std::cout << "Введите число: ";
    std::cin >> number;

    int count = 0;
    bool found = false;

    // Преобразуем число в последовательность цифр
    while (number > 0) {
        // Проверьте последнюю цифру
        if (number % 10 == 7) {
            count++;
            // Если мы уже нашли две семерки подряд
            if (count == 3) {
                found = true;
                break;
            }
        } else {
            count = 0; // Сбрасываем счетчик, если текущая цифра не 7
        }
        number /= 10; // Отбрасываем последнюю цифру
    }

    if (found) {
        std::cout << "Последовательность '777' найдена." << std::endl;
    } else {
        std::cout << "Последовательность '777' не найдена." << std::endl;
    }

    return 0;
}
```

### Объяснение алгоритма:
1. Программа запрашивает у пользователя ввод числа.
2. Внутри цикла `while` мы берем последнюю цифру числа тестируя, является ли она равной 7.
3. Если она равна 7, увеличиваем счетчик. Если счетчик равен 3, мы устанавливаем `found` в `true` и выходим из цикла.
4. Если цифра не равна 7, мы сбрасываем счетчик на 0.
5. После окончания цикла мы выводим результат.

### Заключение:
Если эта реализация решает вашу задачу, это может подсказать направление, в котором следует искать проблему в вашей программе. Если нет, важно дальше исследовать, каким образом ваше число обрабатывается на каждом шаге, возможно, добавив дополнительные отладочные выводы, чтобы лучше понимать, где происходит сбой.
#include <iostream>

int main() {
    int count = 0;
    long num;
    
    std::cout << "Введите ваше число: ";
    std::cin >> num;

    int previous1 = -1;
    int previous2 = -1;
    int current;

    while (num > 0) {
        current = num % 10;
        num /= 10; 

        if (previous2 == 7 && previous1 == 7 && current == 7) {
            count += 1;
            break;
        }

        previous2 = previous1;
        previous1 = current;
    }

    if (count > 0) {
        std::cout << 'T' << std::endl;
    } else {
        std::cout << 'F' << std::endl;
    }

    return 0;
}
Похожие вопросы