Рубрики

Печать от 1 до 100 на C ++, без цикла и рекурсии

Ниже приводится программа на C ++, которая печатает от 1 до 100 без цикла и без рекурсии.

#include <iostream>

using namespace std;

  

template<int N>

class PrintOneToN

{

public:

    static void print()

    {

        PrintOneToN<N-1>::print();  // Обратите внимание, что это не рекурсия

        cout << N << endl;

    }

};

  

template<>

class PrintOneToN<1>

{

public:

    static void print()

    {

        cout << 1 << endl;

    }

};

int main()

{

    const int N = 100;

    PrintOneToN<N>::print();

    return 0;

}

Выход:

1
2
3
..
..
98
99
100

Программа печатает все числа от 1 до n без использования цикла и рекурсии. Концепция, используемая в этой программе — это шаблон метапрограммирования .
Давайте посмотрим, как это работает. Шаблоны в C ++ допускают не-типы данных также в качестве параметра. Не-тип данных означает значение, а не тип данных. Например, в приведенной выше программе N передается как значение, не являющееся типом данных. Новый экземпляр универсального класса создается для каждого параметра, и эти классы создаются во время компиляции. В приведенной выше программе, когда компилятор видит оператор «PrintOneToN> :: print ()» с N = 100, он создает экземпляр PrintOneToN. В функции PrintOneToN :: print () вызывается другая функция PrintOneToN :: print (), поэтому создается экземпляр PrintOneToN. Аналогичным образом создаются все экземпляры от PrintOneToN до PrintOneToN. PrintOneToN :: print () уже существует и печатает 1. Функция PrintOneToN печатает 2 и так далее. Поэтому мы получаем все цифры от 1 до N, напечатанные на экране.

Ниже приведен другой подход к печати от 1 до 100 без цикла и рекурсии.

#include<iostream>

using namespace std;

  

class A

{

public:

    static int a;

    A()

    {  cout<<a++<<endl;  }

};

  

int A::a = 1;

  

int main()

{

    int N = 100;

    A obj[N];

    return 0;

}

Вывод этой программы такой же, как и вышеупомянутой программы. В приведенной выше программе класс A имеет статическую переменную «a», которая увеличивается с каждым экземпляром A. Конструктор по умолчанию класса A печатает значение «a». Когда мы создаем массив объектов типа A, конструктор по умолчанию вызывается для всех объектов один за другим. Значение «а» печатается и увеличивается с каждым вызовом. Поэтому мы получаем все значения от 1 до 100, напечатанные на экране.

Спасибо Лакшманану за предложенный подход.

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

Рекомендуемые посты:

Печать от 1 до 100 на C ++, без цикла и рекурсии

0.00 (0%) 0 votes