Подорожуй з gofrie.com

Вивід чисел від 1 до 1000

Виведьті на екран числа від 1 до 1000 без використання циклів чи умов. Не використовуйте просто printf() чи cout
1000 раз.
Як ви це зробите на С чи С++?

Оригінал:
Print numbers from 1 to 1000 without using any loop or conditional statements. Don't just write the printf() or cout statement 1000 times.
How would you do that using C or C++?

Відповідь в коментарі.
  • +2
  • 16 листопада 2013, 18:56
  • kutsyk
Автор має нагороди

Коментарі (13)

RSS згорнути / розгорнути
На плюсах можна так:

Файл Thousand.h
#ifndef _THOUSAND_H_
#define _THOUSAND_H_

#include <iostream>

template<int i>
class Thousand
{
public:
	Thousand()
	{
		Thousand<i - 1>();
		std::cout << i << std::endl;
	}
};

template<>
class Thousand<0>
{
public:
	Thousand()
	{

	}
};

#endif


Файл main.cpp
#include "Thousand.h"

int main()
{
	Thousand<1000>();
}
+1
  • avatar
  • FTL
  • 17 листопада 2013, 18:59
А щоб тільки сішними фічами, можна ще так
#include <iostream>

void print1(int n)
{
	std::cout << n + 1 << std::endl;
	std::cout << n + 2 << std::endl;
	std::cout << n + 3 << std::endl;
	std::cout << n + 4 << std::endl;
	std::cout << n + 5 << std::endl;
	std::cout << n + 6 << std::endl;
	std::cout << n + 7 << std::endl;
	std::cout << n + 8 << std::endl;
	std::cout << n + 9 << std::endl;
	std::cout << n + 10 << std::endl;
}

void print10(int n)
{
	print1(n + 0);
	print1(n + 10);
	print1(n + 20);
	print1(n + 30);
	print1(n + 40);
	print1(n + 50);
	print1(n + 60);
	print1(n + 70);
	print1(n + 80);
	print1(n + 90);
}

void print100(const int n)
{
	print10(n + 0);
	print10(n + 100);
	print10(n + 200);
	print10(n + 300);
	print10(n + 400);
	print10(n + 500);
	print10(n + 600);
	print10(n + 700);
	print10(n + 800);
	print10(n + 900);
}

int main()
{
	print100(0);
        return 0;
}
+1
  • avatar
  • FTL
  • 18 листопада 2013, 00:33
Як на мене перший варіант красивіший.
Молодець!
=-)
0
  • avatar
  • kutsyk
  • 18 листопада 2013, 07:08
Він то крисивіший, але на C не канає)
0
  • avatar
  • FTL
  • 18 листопада 2013, 09:58
Я, правда, досі думаю на Java, але хіба ви дотримались завдання? Хіба не треаб було все в 1 стрінг зліпити і вивести його?
0
  • avatar
  • nira
  • 19 листопада 2013, 10:38
В умові не вказано зробити це одним рядком.
Тож все гаразд!
0
Якщо мета виправдовує засоби, і якщо сприймати умову буквально, то в принципі можна висмоктати з пальця щось таке:


#include <iostream>
#include <vector>
#include <exception>

void fillVector(const std::vector<size_t>& v, const size_t i)
{
	v.at(i - 1);
	std::cout << i << std::endl;
	try
	{
		fillVector(v, i + 1);
	}
	catch (...)
	{
	}
}

void printVector(const size_t a, const size_t b)
{
	if (a > b)
	{
		throw std::invalid_argument("Invalid interval");
	}
	fillVector(std::vector<size_t>(b - a + 1), a);
}

int main()
{
	printVector(1, 1000);
	return 0;
}
+1
  • avatar
  • FTL
  • 22 листопада 2013, 21:36
int x = 0;

struct test {
	static int x;
	test() { cout << ++x << endl; }
};
int test::x = 0;


int main() {
	test x[1000];
	return 0;
}
+1
без непотрібної змінної

struct test {
	static int x;
	test() { cout << ++x << endl; }
};
int test::x = 0;


int main() {
	test x[1000];
	return 0;
}
+1
C / C++ all good i guess
0
Рішення, імхо, найкраще, але на C не проканає — в C нема конструкторів.
0
  • avatar
  • FTL
  • 27 листопада 2013, 21:32
точно :(
0
тільки замість cout — printf
0