Эмо бой не проходит 14 тест

A. Эмо бой

Ограничение времени 1 секунда

Ограничение памяти 64Mb

Ввод стандартный ввод или input.txt

Вывод стандартный вывод или output.txt

При регистрации на портале каждый эмо бой обязан придумать себе никнейм. Никнейм должен быть не короче восьми символов, содержать в себе хотя бы одну цифру, и хотя бы по одной заглавной и прописной английской букве.

Формат ввода Вводится никнейм — последовательность букв и цифр без пробелов. Длина строки не превосходит 100 символов.

Формат вывода Выведите «YES», если ник подходит для эмо боя, и «NO» — в противном случае.

Пример 1

Ввод

altushka

Вывод

NO

Пример 2

Ввод EmObOy2005

Вывод

YES

#include <iostream>
#include <string>

bool nik_approved(const std::string& s)
{
    if (s.empty())
        return false;
    else
    {
        bool len_8 = s.length() > 7, dig = false, small_let = false, cap_letter = false;
        for (auto i : s)
            if (i >= '0' && i <= '9')
            {
                dig = true;
                break;
            }
        for (auto i : s)
            if (i >= 'a' && i <= 'z')
            {
                small_let = true;
                break;
            }
        for (auto i : s)
            if (i >= 'A' && i <= 'Z')
            {
                cap_letter = true;
                break;
            }
        return len_8 && small_let && cap_letter;
    }
}

int main()
{
    std::string s;
    std::cin >> s;
    if(nik_approved(s))
        std::cout << "YES";
    else
        std::cout << "NO";
    return 0;
}

Задача проще некуда, но не проходит 14й тест! Что тут не так? Или нужно проверять что входная строка не содержит управляющих символов и тп, а только обычные буквы и символы?


Ответы (1 шт):

Автор решения: Harry

По-моему, в

return len_8 && small_let && cap_letter;

стоит добавить && dig

return len_8 && small_let && cap_letter && dig;

И работать над вопросом хотя бы 5 минут, прежде чем бежать спрашивать на ruSO...

→ Ссылка