Информатики, решите задачу о пикообразных числах?

01.01.2001

Информатики, решите задачу о пикообразных числах?
Назовем натуральное число пикообразным в случае, если в его десятичной записи три и больше цифр, количество цифр нечетное и центральная цифра больше соседних, которые, в свою очередь, больше соседних и т. д. Первое пикообразное число 120 . Примерами пикообразных чисел являются, например, 376,13864,146 7532. Тогда пикообразным числом с номером 7777 будет …

  • Ответ: 7777-ым пикообразным число является 3459864.

    Для решения задачи "в лоб", в котором перебираются все числа, начиная со 100, был написан следующий код на C++:
    #include
    #include
    #include
    #include

    //Проверка, является ли число value пикообразным
    bool check_for_peak(unsigned int value)
    {
    if (value < 100)
    {
    return false;
    }

    char number[11];
    size_t digits = strlen(_ui64toa(value, number, 10));

    if (digits % 2 == 0)
    {
    return false;
    }

    size_t lindex, rindex;
    lindex = rindex = (digits - 1)/2;

    while (lindex > 0)
    {
    //Можно сравнивать символы, так как признаки больше и меньше между символами также сохраняются
    //То есть символ '1' < '2', так как их коды расположены в порядке возрастания
    if ((int)number[rindex] <= (int)number[rindex + 1] ||
    (int)number[lindex] <= (int)number[lindex - 1])
    {
    return false;
    }

    ++rindex;
    --lindex;
    }

    return true;
    }

    void main()
    {
    unsigned int target = 7777;
    unsigned int peaks = 0;
    unsigned int x = 99;

    while (peaks != target)
    {
    ++x;
    if (check_for_peak(x))
    {
    ++peaks;
    }
    }

    printf("%u-th peak number is %u.\n", target, x);

    getch();
    }

Вас заинтересует