1. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

Задача С++ в классах

Тема в разделе "Вопросы новичков и не только", создана пользователем NickaNet, 19 дек 2010.

Статус темы:
Закрыта.
  1. NickaNet

    NickaNet Гость

    Репутация:
    0
    Дан массив натуральных чисел. Напечатать:
    а) все элементы массива, являющиеся двузначными числами
    б) все элементы массива, являющиеся трёхзначными числами

    Не могу решить эту задачу в классах, плохо разбираюсь в них. Пожалуйста, помогите с решением, очень срочно требуется!
     
  2. Rififi

    Rififi Гость

    Репутация:
    0
    Код:
    #include <algorithm>
    #include <functional>
    #include <iostream>
    
    #include <math.h>
    
    #include <locale>
    
    /*
    Дан массив натуральных чисел. Напечатать:
    а) все элементы массива, являющиеся двузначными числами
    б) все элементы массива, являющиеся трёхзначными числами
    */
    
    template <int N>
    struct Power
    {
    enum { value = 10 * Power<N-1>::value };
    };	
    
    template <>
    struct Power<0>
    {
    enum { value = 1 };
    };	
    
    template <int NumberOfDigits>
    struct digits : public std::unary_function<int, bool>
    {
    bool operator()(int i) const
    {
    i = abs(i);
    return i >= MIN && i < MAX;
    }
    
    static const int MIN = Power<NumberOfDigits-1>::value;
    static const int MAX = Power<NumberOfDigits>::value;
    };
    
    template <size_t D, typename T, size_t N>
    size_t count(const T (&arr)[N])
    {
    return std::count_if(arr, arr+N, digits<D>());
    }
    
    int main()
    {
    setlocale(LC_ALL, "");
    
    const int arr[] = {1,5,9,10,99,100,123,500,999,-999,1000,1001};
    
    std::cout << "Number of two-digit numbers: " << count<2>(arr) << std::endl;
    std::cout << "Number of three-digit numbers: " << count<3>(arr) << std::endl;
    
    return 0;
    }
    Проверка:

    http://codepad.org/ozNv5CRo
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей