Бесплатный урок с нашим репетитором!

Узнать подробнее

Новая Школа - онлайн-школа подготовки к ЕГЭ
При поддержке
Посмотреть все вопросы нейросети
Бесплатный пробный урок с репетитором

Узнай больше про репетиторов Новой Школы и запишись на бесплатный пробный урок. Мы проверим твой уровень знаний и составим план обучения по любому предмету и классу

Вопрос от Анонимного юзера 21 марта 2026 05:50

Цифры данного числа n образуют строго возрастающую последовательность. Реши на языке C

Ответ нейросети

21 марта 2026 05:50

Задача звучит как: проверить, что цифры данного неотрицательного числа n в его обычном записи образуют строго возрастающую последовательность слева направо. То есть d1 < d2 < ... < dk, где n = d1d2...dk.

Пояснение к подходу (почему так работает):

  • Если digits слева направо строго возрастают, то слева самая младшая цифра d1, затем d2 и т.д.
  • Если мы читаем число справа налево (от наименьшей разрядности к наибольшей), получаем последовательность dk, dk-1, ..., d1, и она должна быть строго убывающей: dk > dk-1 > ... > d1.
  • Поэтому можно проверить цифры справа налево: на каждом шаге сравнить текущую цифру c с предыдущей взятой цифрой last. Если c >= last — условие строгой возрастающей последовательности слева нарушено.

Алгоритм:

  • Прочитать n как беззнаковое целое (unsigned long long). Это удобно и быстро для чисел до ~1.8e19.
  • Если n имеет одну цифру или равен 0 — ответ YES.
  • last = последняя цифра (n % 10); далее удаляем последнюю цифру и в цикле: cur = n % 10; если cur >= last, вернуть NO; иначе last = cur; продолжать.
  • Если цикл завершился без нарушений — вернуть YES.

Код на C (на основе числового подхода):

#include <stdio.h>

int main() { unsigned long long n; if (scanf("%llu", &n) != 1) return 0;

int ok = 1;

int last = n % 10;
n /= 10;

while (n > 0) {
    int cur = n % 10;
    if (cur >= last) { // нарушено строгое возрастание слева
        ok = 0;
        break;
    }
    last = cur;
    n /= 10;
}

printf("%s\n", ok ? "YES" : "NO");
return 0;

}

Пояснение к коду:

  • Работает за O(number of digits) времени.
  • Работает для любого n, который помещается в unsigned long long (до примерно 20 цифр).

Дополнительно: если число может иметь больше цифр, чем позволяет unsigned long long, можно решить аналогично с использованием строки. Ниже альтернативный вариант на строках (путь «для любых длин»):

#include <stdio.h> #include <string.h>

int main() { char s[10005]; if (scanf("%10004s", s) != 1) return 0;

int len = strlen(s);
int start = (s[0] == '-' || s[0] == '+') ? 1 : 0;

int ok = 1;
// пропускаем знак, затем сравниваем соседние цифры слева направо
for (int i = start + 1; i < len; ++i) {
    // пропускаем нецифровые символы (на практике обычно их нет)
    if (!(s[i-1] >= '0' && s[i-1] <= '9')) continue;
    if (!(s[i] >= '0' && s[i] <= '9')) continue;
    if (s[i] <= s[i-1]) {
        ok = 0;
        break;
    }
}

printf("%s\n", ok ? "YES" : "NO");
return 0;

}

Если нужна помощь с выбором варианта в вашем задачнике (по формату вывода или constraints), скажите — адаптирую под конкретные требования.

Задай свой вопрос

Напиши любую задачу или вопрос, а нейросеть её решит

Похожие вопросы 15

Бесплатно Мобильное приложение ГДЗ
Мобильное приложение ГДЗ

Задавай вопросы искуcственному интеллекту текстом или фотографиями в приложении на iPhone или Android

qr-codegoogle-playapp-store

Саша — ассистент в телеграмме

цифры данного числа n образуют строго возрастающую последовательность. Реши на языке C
Задача звучит как: проверить, что цифры данного неотрицательного числа n в его обычном записи образуют строго возрастающую последовательность слева направо. То есть d1 < d2 < ... < dk, где n = d1d2...dk. Пояснение к подходу (почему так работает): - Если digits слева направо строго возрастают, то слева самая младшая цифра d1, затем d2 и т.д. - Если мы читаем число справа налево (от наименьшей разрядности к наибольшей), получаем последовательность dk, dk-1, ..., d1, и она должна быть строго убывающей: dk > dk-1 > ... > d1. - Поэтому можно проверить цифры справа налево: на каждом шаге сравнить текущую цифру c с предыдущей взятой цифрой last. Если c >= last — условие строгой возрастающей последовательности слева нарушено. Алгоритм: - Прочитать n как беззнаковое целое (unsigned long long). Это удобно и быстро для чисел до ~1.8e19. - Если n имеет одну цифру или равен 0 — ответ YES. - last = последняя цифра (n % 10); далее удаляем последнюю цифру и в цикле: cur = n % 10; если cur >= last, вернуть NO; иначе last = cur; продолжать. - Если цикл завершился без нарушений — вернуть YES. Код на C (на основе числового подхода): #include int main() { unsigned long long n; if (scanf("%llu", &n) != 1) return 0; int ok = 1; int last = n % 10; n /= 10; while (n > 0) { int cur = n % 10; if (cur >= last) { // нарушено строгое возрастание слева ok = 0; break; } last = cur; n /= 10; } printf("%s\n", ok ? "YES" : "NO"); return 0; } Пояснение к коду: - Работает за O(number of digits) времени. - Работает для любого n, который помещается в unsigned long long (до примерно 20 цифр). Дополнительно: если число может иметь больше цифр, чем позволяет unsigned long long, можно решить аналогично с использованием строки. Ниже альтернативный вариант на строках (путь «для любых длин»): #include #include int main() { char s[10005]; if (scanf("%10004s", s) != 1) return 0; int len = strlen(s); int start = (s[0] == '-' || s[0] == '+') ? 1 : 0; int ok = 1; // пропускаем знак, затем сравниваем соседние цифры слева направо for (int i = start + 1; i < len; ++i) { // пропускаем нецифровые символы (на практике обычно их нет) if (!(s[i-1] >= '0' && s[i-1] <= '9')) continue; if (!(s[i] >= '0' && s[i] <= '9')) continue; if (s[i] <= s[i-1]) { ok = 0; break; } } printf("%s\n", ok ? "YES" : "NO"); return 0; } Если нужна помощь с выбором варианта в вашем задачнике (по формату вывода или constraints), скажите — адаптирую под конкретные требования.