Форум программистов, компьютерный форум CyberForum.ru

Как вывести числа от 1 до 1000 без сравнений в Си++? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 81, средняя оценка - 4.65
sergey1369
0 / 0 / 0
Регистрация: 02.03.2011
Сообщений: 6
02.03.2011, 18:08     Как вывести числа от 1 до 1000 без сравнений в Си++? #1
Привет всем.

Получил на собеседовании по Си++ такой странный вопрос, подумал, ещё подумал.
Ничего путного в голову не пришло. Вообщем стало дико любопытно, а как это
сделать средствами Си++?

Переадресую вопрос умным головам форума. Подскажите.

P.S. Человек с которым общался явно знал не менее двух решений.
Но я был не в том положении, чтобы спрашивать у него.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2011, 18:08     Как вывести числа от 1 до 1000 без сравнений в Си++?
Посмотрите здесь:

C++ Вывести числа в диапазоне от 0 до 500.которые делятся на 5 без остатка
подскажите: как вывести на экран числа от 0 до 20.... и еще одна: вывести все четные числа от 0 до 20... C++
Как из числа double 4.056 извлечь число 1000? C++
C++ Вывести все 6-ти значные числа, которые делятся без остатка на сумму своих цифр
Без операторов цикла вывести цифры числа через пробел C++
Вывести на экран все числа, на которые заданное число делится без остатка C++
Вывести в цикле те цифры числа, которые не делятся на 3 без остатка. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
odip
Эксперт C++
 Аватар для odip
7226 / 3288 / 59
Регистрация: 17.06.2009
Сообщений: 14,165
02.03.2011, 20:40     Как вывести числа от 1 до 1000 без сравнений в Си++? #2
cout <<1 <<"\n";
cout <<2 <<"\n";
cout <<3 <<"\n";
cout <<4 <<"\n";
Дальше лень писать
sergey1369
0 / 0 / 0
Регистрация: 02.03.2011
Сообщений: 6
02.03.2011, 21:01  [ТС]     Как вывести числа от 1 до 1000 без сравнений в Си++? #3
Тоже вариант - проверяется трудолюбие претендента!
fimbulwinter
 Аватар для fimbulwinter
306 / 306 / 1
Регистрация: 16.01.2011
Сообщений: 1,073
02.03.2011, 21:13     Как вывести числа от 1 до 1000 без сравнений в Си++? #4
я конечно не знаток Си и Си++
да в общем то и языков программирования))

1.
C++
1
2
3
4
5
6
int i=1;
    while(i%1001)
    {
        cout<<i<<endl;
        i++;
    }
2.
C++
1
2
3
4
5
6
int i = 1, j = 1000;
    while(j)
    {
        cout<<i<<endl;
        i++; j--;   
    }
RUSya82
 Аватар для RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
02.03.2011, 21:13     Как вывести числа от 1 до 1000 без сравнений в Си++? #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
using namespace std;
 
int main()
{
    int x = 1;
    do
    {
        cout << x << endl;
        x++;
    }while(1001-x);
    system("PAUSE");
    return 0;
}
sergey1369
0 / 0 / 0
Регистрация: 02.03.2011
Сообщений: 6
02.03.2011, 21:18  [ТС]     Как вывести числа от 1 до 1000 без сравнений в Си++? #6
Ребята, спасибки за идею, но к сожалению вариант с while(n) это сравнение. Я первым делом уточнил.
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
02.03.2011, 21:19     Как вывести числа от 1 до 1000 без сравнений в Си++? #7
Разве во всех предложенных вариантах не происходит сравнения, хоть и неявного?
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
02.03.2011, 21:21     Как вывести числа от 1 до 1000 без сравнений в Си++? #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
template <int N>
void printN () {
    printN<N - 1>();
    std::cout << N << std::endl;
}
 
template <>
void printN<0> () {}
 
int main () {
    printN<500>();
 
    return 0;
}
RUSya82
 Аватар для RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
02.03.2011, 21:24     Как вывести числа от 1 до 1000 без сравнений в Си++? #9
То бишь циклы вообще не пользовать?
sergey1369
0 / 0 / 0
Регистрация: 02.03.2011
Сообщений: 6
02.03.2011, 21:27  [ТС]     Как вывести числа от 1 до 1000 без сравнений в Си++? #10
Циклы со сравнениями не использовать, то есть while(1) или for(; может и прокатит,
но while(n) и if(n) нельзя.
fimbulwinter
 Аватар для fimbulwinter
306 / 306 / 1
Регистрация: 16.01.2011
Сообщений: 1,073
02.03.2011, 21:31     Как вывести числа от 1 до 1000 без сравнений в Си++? #11
собственно чем while(1) от while(n) отличаются?
sergey1369
0 / 0 / 0
Регистрация: 02.03.2011
Сообщений: 6
02.03.2011, 21:33  [ТС]     Как вывести числа от 1 до 1000 без сравнений в Си++? #12
Volovzi - ГЕНИАЛЬНО! Работает!!! Спасибо, я так и думал, что это какая-нибудь хитро выдуманная
языковая фишка! Такое использование специализации мне и в голову не приходило!!! Спасибо!!!

Fimbulwinter, про константу и бесконечные циклы я не уточнял. Поэтому не могу точно ответить.
Евгений М.
1033 / 974 / 53
Регистрация: 28.02.2010
Сообщений: 2,819
Завершенные тесты: 2
03.03.2011, 06:28     Как вывести числа от 1 до 1000 без сравнений в Си++? #13
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вот и второе решение.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <stdlib.h>
 
void donothing() {}
 
void dosomething() {exit(0);}
 
int main()
{
    int i;
 
    void (*pf[2])() = {donothing, dosomething};
    
    for (i=1;; i++)
    {
        printf("%d\n", i);
        pf[i/1000]();
    }
}
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,315
03.03.2011, 11:26     Как вывести числа от 1 до 1000 без сравнений в Си++? #14
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
 
class A
{
    static int i;
public:
    A() { cout << ++i << endl; }
};
 
int A::i = 0;
 
int main()
{
    A array[1000];
    return 0;
}
sergey1369
0 / 0 / 0
Регистрация: 02.03.2011
Сообщений: 6
03.03.2011, 14:15  [ТС]     Как вывести числа от 1 до 1000 без сравнений в Си++? #15
Красиво!!
vow
Сообщений: n/a
15.03.2011, 02:26     Как вывести числа от 1 до 1000 без сравнений в Си++? #16
CheshireCat,
nxnx
Формучанин
361 / 292 / 16
Регистрация: 02.11.2010
Сообщений: 1,227
15.03.2011, 11:05     Как вывести числа от 1 до 1000 без сравнений в Си++? #17
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
 
#define PRINT5(N) printf("%d %d %d %d %d ",N,N+1,N+2,N+3,N+4);N+=5
#define PRINT25(N) PRINT5(N);PRINT5(N);PRINT5(N);PRINT5(N);PRINT5(N)
 
#define PRINT100(N)   PRINT25(N); PRINT25(N); PRINT25(N);PRINT25(N)
#define PRINT250(N)  PRINT100(N);PRINT100(N); PRINT25(N);PRINT25(N)
#define PRINT1000(N) PRINT250(N);PRINT250(N);PRINT250(N);PRINT250(N)
 
 
int main(void)
{
  int i=1;
 
  PRINT1000(i); //Выводит числа от i(включая) до i+1000(исключая)
 
  
  printf("\nPress Enter to exit...");int fcked_win32;scanf("%c",(char*)&fcked_win32);
  return 0;
  
}
Nick Alte
Эксперт С++
1594 / 986 / 117
Регистрация: 27.09.2009
Сообщений: 1,902
Завершенные тесты: 1
15.03.2011, 22:55     Как вывести числа от 1 до 1000 без сравнений в Си++? #18
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
template<unsigned int N>
inline void printnums()
{
    printnums<N-1>();
    std::cout << N << std::endl;
}
 
template<>
inline void printnums<0>()
{
}
 
int main()
{
    printnums<1000>();
}
не всякий компилятор потянет
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
15.03.2011, 23:05     Как вывести числа от 1 до 1000 без сравнений в Си++? #19
Nick Alte, во-первых, этот вариант уже был, а во-вторых, всякий. Надо только установить глубину реализации шаблонов в тысячу.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2011, 23:06     Как вывести числа от 1 до 1000 без сравнений в Си++?
Еще ссылки по теме:

вывести массив без максимального и минимального числа C++
C++ Сколько сравнений понадобится в худшем случае, чтобы упорядочить по возрастанию 4 различных числа
Даны числа от 1 до 1000 и число m. Вывести результат умножение куба нечетных сотен на число m C++
C++ Вывести все целые числа, на которые оба введенных числа делятся без остатка
Вывести числа, заканчивающиеся на 3 или 5, находящиеся в диапазоне от 1 до 1000 C++ Builder

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Nick Alte
Эксперт С++
1594 / 986 / 117
Регистрация: 27.09.2009
Сообщений: 1,902
Завершенные тесты: 1
15.03.2011, 23:06     Как вывести числа от 1 до 1000 без сравнений в Си++? #20
volovzi, если не ошибаюсь, то многие версии визуала просто не вытянут тысячу вне зависимости от настроек. Ну а что было - извиняйте, не разглядел именно этот вариант.
Yandex
Объявления
15.03.2011, 23:06     Как вывести числа от 1 до 1000 без сравнений в Си++?
Ответ Создать тему
Опции темы

Текущее время: 15:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru