Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/113: Рейтинг темы: голосов - 113, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 02.03.2011
Сообщений: 6
1

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

02.03.2011, 18:08. Показов 22344. Ответов 68
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем.

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

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

P.S. Человек с которым общался явно знал не менее двух решений.
Но я был не в том положении, чтобы спрашивать у него.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.03.2011, 18:08
Ответы с готовыми решениями:

Вывести все числа из диапазона от 0 до 1000, которые делятся на 2 и на 3 без остатка (for, while)
Напишите программу которая выводит все числа из диапазона от 0 до 1000 которая делятца на 2 и на 3...

Найти числа, меньше 1000, сумма делителей (без самого числа) которых, больше данного числа
Найти числа, меньше 1000, сумма делителей(без самого числа) которых, больше данного числа. ...

Как вывести на консоль числа от 1 до 1000 не используя цикл?
Как вывести на консоль числа от 1 до 1000 не используя цикл ?

Написать функцию, которая получает 2 целых числа и возвращает большее из них без циклов, ветвлений и сравнений
решаем всем офисом "всем привет! лектор задал задачку, я ломал голову но так и не придумал. ...

68
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
02.03.2011, 20:40 2
cout <<1 <<"\n";
cout <<2 <<"\n";
cout <<3 <<"\n";
cout <<4 <<"\n";
Дальше лень писать
0
0 / 0 / 0
Регистрация: 02.03.2011
Сообщений: 6
02.03.2011, 21:01  [ТС] 3
Тоже вариант - проверяется трудолюбие претендента!
0
309 / 309 / 1
Регистрация: 16.01.2011
Сообщений: 1,073
02.03.2011, 21:13 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--;   
    }
0
242 / 120 / 14
Регистрация: 15.10.2010
Сообщений: 395
02.03.2011, 21:13 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;
}
0
0 / 0 / 0
Регистрация: 02.03.2011
Сообщений: 6
02.03.2011, 21:18  [ТС] 6
Ребята, спасибки за идею, но к сожалению вариант с while(n) это сравнение. Я первым делом уточнил.
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
02.03.2011, 21:19 7
Разве во всех предложенных вариантах не происходит сравнения, хоть и неявного?
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
02.03.2011, 21:21 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;
}
9
242 / 120 / 14
Регистрация: 15.10.2010
Сообщений: 395
02.03.2011, 21:24 9
То бишь циклы вообще не пользовать?
0
0 / 0 / 0
Регистрация: 02.03.2011
Сообщений: 6
02.03.2011, 21:27  [ТС] 10
Циклы со сравнениями не использовать, то есть while(1) или for(; может и прокатит,
но while(n) и if(n) нельзя.
0
309 / 309 / 1
Регистрация: 16.01.2011
Сообщений: 1,073
02.03.2011, 21:31 11
собственно чем while(1) от while(n) отличаются?
0
0 / 0 / 0
Регистрация: 02.03.2011
Сообщений: 6
02.03.2011, 21:33  [ТС] 12
Volovzi - ГЕНИАЛЬНО! Работает!!! Спасибо, я так и думал, что это какая-нибудь хитро выдуманная
языковая фишка! Такое использование специализации мне и в голову не приходило!!! Спасибо!!!

Fimbulwinter, про константу и бесконечные циклы я не уточнял. Поэтому не могу точно ответить.
0
1080 / 1007 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
03.03.2011, 06:28 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]();
    }
}
3
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
03.03.2011, 11:26 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;
}
6
0 / 0 / 0
Регистрация: 02.03.2011
Сообщений: 6
03.03.2011, 14:15  [ТС] 15
Красиво!!
0
vow
15.03.2011, 02:26 16
CheshireCat,
Формучанин
364 / 294 / 42
Регистрация: 02.11.2010
Сообщений: 1,242
15.03.2011, 11:05 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;
  
}
0
Эксперт С++
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
15.03.2011, 22:55 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>();
}
не всякий компилятор потянет
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
15.03.2011, 23:05 19
Nick Alte, во-первых, этот вариант уже был, а во-вторых, всякий. Надо только установить глубину реализации шаблонов в тысячу.
0
Эксперт С++
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
15.03.2011, 23:06 20
volovzi, если не ошибаюсь, то многие версии визуала просто не вытянут тысячу вне зависимости от настроек. Ну а что было - извиняйте, не разглядел именно этот вариант.
0
15.03.2011, 23:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.03.2011, 23:06
Помогаю со студенческими работами здесь

Вывести на экран те числа из интервала [10 .. 1000], которые меньше произведения цифр десятичной записи числа
Написать программу: среди чисел от 10 до 1000,найти и вывести на экран те, которые меньше...

Вывести простые числа в диапазоне от 2 до 1000
Здраствуйте, есть задачка: Создать программу, которая выводит на экран простые числа в диапазоне...

Вывести простые числа на интервале от 2 до 1000
Создать программу, которая выводит на экран простые числа в диапазоне от 2 до 1000. (Число...

Вивести на екран усі числа, що діляться на 11 без остачі від 11 до 1000 крім 110 і 220.
ДОПОМОЖІТЬ ДОРОБИТИ ЗАДАЧУ!:help: Вивести на екран усі числа, що діляться на 11 без остачі від 11...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru