@Vladik_gal
Начинающий прогер

Согласовать окончания C++, как сделать?

Имеется задание, согласовать окончание в предложении для произвольного числа, по типу "Мы нашли X грибов", все бы ничего, но вот к числам 11-14 корректное окончание грибов, а для 22-24 гриба, исключение в коде для 11-14 сделал, а вот как сделать тоже самое для 113, 213, 313 и т.д. понять не могу
#include <iostream>
using namespace std;
int main()
{
    int k;
    int k2;
    cin >> k;
    k2 = k % 10;
    if (k == 1)
    {
        cout << "Мы нашли " << k << " гриб";
    }
    else if (k < 5)
    {
        cout << "Мы нашли " << k << " грибa";
    }
    else if (k < 15)
    {
        cout << "Мы нашли " << k << " грибов";
    }
    if (k > 20)
    {
        if (k2 == 1)
        {
            cout << "Мы нашли " << k << " гриб";
        }
        else if (k2 < 5)
        {
            cout << "Мы нашли " << k << " грибa";
        }
        else
        {
            cout << "Мы нашли " << k << " грибов";
        }
        return 0;
    }
}
  • Вопрос задан
  • 237 просмотров
Решения вопроса 1
@Vladik_gal Автор вопроса
Начинающий прогер
Всем огромное спасибо, кто помогал, в итоге пришел к такому решению
#include <iostream>
using namespace std;
int main()
{
    int k;
    int k2;
    int k3;
    int end;
    cout << "Введите колличетсво грибов: ";
    cin >> k;
    k2 = k % 100;
    k3 = k2 % 10;
    if (k2 == 0)
    {
        cout << "Мы нашли " << k << " gribov";
    }
    else if (k2 == 1)
    {
        cout << "Мы нашли " << k << " grib";
    }
    else if (k2 < 5)
    {
        cout << "Мы нашли " << k << " griba";
    }
    else if (k2 < 20)
    {
        cout << "Мы нашли " << k << " gribov";
    }
    else
    {
        if (k3 == 1)
        {
            cout << "Мы нашли " << k << " grib";
        }
        else if (k3 > 1 and k3 < 5)
        {
            cout << "Мы нашли " << k << " griba";
        }
        else
        {
            cout << "Мы нашли " << k << " gribov";
        }
    }
    return 0;
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
mayton2019
@mayton2019
Bigdata Engineer
Есть такая популярная задача. Называется СУММА ПРОПИСЬЮ. Ее решают тыщу раз и для каждого языка уже написано много кода. Эти типа 1.25 == "Один рубль двадцать пять копеек".

Поищи исходники - там будет половина решения твоих окончаний.
Ответ написан
sheerluck
@sheerluck
#include <iostream>
#include <map>

int main()
{
    using namespace std::string_literals;
    auto m = std::map<int,std::string>{
        {1,"гриб"s},
        {2,"гриба"s},
        {3,"грибов"s},
    };
    auto txt = "гриб"s;

    auto k = int{};
    std::cin >> k;
    auto k10 = k % 10;
    auto k100 = k % 100;

    if      (k100 == 0) txt = m.at(3);
    else if (k100 == 1) txt = m.at(1);
    else if (k100 <  5) txt = m.at(2);
    else                txt = m.at(3);
    if (k100 > 20)
    {
        if      (k10 == 0) txt = m.at(3);
        else if (k10 == 1) txt = m.at(1);
        else if (k10 <  5) txt = m.at(2);
        else               txt = m.at(3);
    }

    std::cout << "Мы нашли " << k << " " << txt << '\n';
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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