0 / 0 / 0
Регистрация: 02.03.2011
Сообщений: 6

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

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

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

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

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

P.S. Человек с которым общался явно знал не менее двух решений.
Но я был не в том положении, чтобы спрашивать у него.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.03.2011, 18:08
Ответы с готовыми решениями:

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

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

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

68
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
16.03.2011, 00:53
Студворк — интернет-сервис помощи студентам
А это тоже считается?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <vector>
#include <iostream>
#include <algorithm>
 
struct some
{
    some():i(0)
    {
    }
    int operator () ()
    {
        return ++i;
    }
    int i;
};
 
int main()
{
    const int n=1000;
    std::vector<int>(n);
    some sm;
    std::generate(vec.begin(), vec.end(), sm);
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
    return 0;
}
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
16.03.2011, 01:01
а если так
for(int i=1000;i;i--)
printf("%d",1001-i);
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
16.03.2011, 01:04
ForEveR, алгоритмы в большинстве своём — оболочки для циклов, так что не, не считается :) .
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
16.03.2011, 01:09
ValeryS, думаете, в вашем коде нет сравнений?
0
 Аватар для r3almaster
0 / 0 / 0
Регистрация: 09.03.2011
Сообщений: 4
16.03.2011, 01:11
А метки и переходы никак?)
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
16.03.2011, 01:23
Цитата Сообщение от silent_1991 Посмотреть сообщение
ValeryS, думаете, в вашем коде нет сравнений?
в С нет
когда скомпилируется может быть и будут( в машинных кодах) зависит от архитектуры
здесь используется два допущения
1 в С 0 false любое число true
2 цикл for крутится до тех пор пока условие(вторая запись) true
т.е. будет крутится пока i не станет 0
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
16.03.2011, 01:25
ValeryS, т.е. происходит неявное сравнение с нулём. Т.е. факт сравнения налицо.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
16.03.2011, 01:26
можно написать и так
for(int i=1;i%1001;i++)
но такой вариант с while уже писали
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
16.03.2011, 01:28
И снова неявное сравнение с нулём. Циклы тут не прокатят.
0
Формучанин
364 / 296 / 42
Регистрация: 02.11.2010
Сообщений: 1,245
16.03.2011, 01:29
помоему задачу надо было ставить более конкретно:
запрещены команды j** (исключая jmp; или cmp\test ?) и команды цикла, такие как loop
любое условный переход создаст в конечном коде инструкцию j**
цикл - либо создаст loop (выполнится ecx раз) либо j**
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
16.03.2011, 01:29
Цитата Сообщение от silent_1991 Посмотреть сообщение
ValeryS, т.е. происходит неявное сравнение с нулём. Т.е. факт сравнения налицо
где сравнение???
я не явно привожу int к bool
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
16.03.2011, 01:31
ValeryS, факт неявности не исключает факт сравнения.

Добавлено через 50 секунд
nxnx, ну почему же, бесконечный цикл, судя по всему, использовать разрешается.
0
Формучанин
364 / 296 / 42
Регистрация: 02.11.2010
Сообщений: 1,245
16.03.2011, 01:32
Цитата Сообщение от silent_1991 Посмотреть сообщение
ValeryS, факт неявности не исключает факт сравнения.

Добавлено через 50 секунд
nxnx, ну почему же, бесконечный цикл, судя по всему, использовать разрешается.
бесконечный цикл соберётся в jmp что я и отметил
1
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
16.03.2011, 01:34
nxnx, а, да, извиняюсь. Невнимательно прочитал ваше сообщение.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
16.03.2011, 01:34
в архитектуре ATmega есть набор команд которые выполняются в зависимости от флага
а флаг выставляется не только операциями сравнения.
поэтому я и написал в С НЕТ сравнений
а в машинных кодах как повезет
разговор по моему о С
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
16.03.2011, 01:37
ValeryS, во-первых, разговор, по-моему, о Си++. Во-вторых, всю жизнь думал, что while (i % 1001) эквивалентно while (i % 1001 != 0). Или я чего-то не понимаю?
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
16.03.2011, 01:46
Цитата Сообщение от silent_1991 Посмотреть сообщение
while (i % 1001) эквивалентно while (i % 1001 != 0).
Не эквивалентно. Хотя результат будет один и тот же(Вот такая загогулина)
в первом случае i % 1001 у тебя будут значения от 0 до 1000 (далее по циклу)
во втором i % 1001 != 0 только два значения истина и ложь
стандарт нам обещает только что ЛОЖЬ =0
ИСТИНА любое другое значение
о том что значение будет сравниваться с 0 никто не обещает
и то что это делают компиляторы для ИНТЕЛа
не факт что будут делать на других процессорах
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
16.03.2011, 01:48
ValeryS, не понимаю, если мы сейчас говорим о сях, о какой истине или лжи идёт речь?
0
Формучанин
364 / 296 / 42
Регистрация: 02.11.2010
Сообщений: 1,245
16.03.2011, 01:50
Assembler
1
2
3
4
5
6
7
8
9
10
!    for (i=0;i<100;i++)
main()
main+14: movl   $0x0,0x1c(%esp)
main+22: jmp    0x4013dc <main+28>
main+24: incl   0x1c(%esp)
main+28: cmpl   $0x63,0x1c(%esp)
main+33: jle    0x4013d8 <main+24>
!    {
!
!    }
Assembler
1
2
3
4
5
6
7
8
9
10
11
!    for (i=0;i<j;i++)
main()
main+22: movl   $0x0,0x1c(%esp)
main+30: jmp    0x4013e4 <main+36>
main+32: incl   0x1c(%esp)
main+36: mov    0x1c(%esp),%eax
main+40: cmp    0x18(%esp),%eax
main+44: jl     0x4013e0 <main+32>
!    {
!
!    }

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
!    while  (i%1000)
main()
main+22: jmp    0x4013dc <main+28>
main+28: mov    0x1c(%esp),%eax
main+32: mov    $0x3e8,%ecx
main+37: cltd   
main+38: idiv   %ecx
main+40: mov    %edx,%eax
main+42: test   %eax,%eax
main+44: jne    0x4013d8 <main+24>
!    {
!        i++;
main+24: incl   0x1c(%esp)
!    }
обратите внимание, везде есть инструкции j**
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
16.03.2011, 01:55
а если так рассуждать то здесь тупо подойдет только второй пост
printN<500>();
компилятор скорее всего загонит в цикл

Добавлено через 3 минуты
Цитата Сообщение от silent_1991 Посмотреть сообщение
ValeryS, не понимаю, если мы сейчас говорим о сях, о какой истине или лжи идёт речь?
переменная типа bool
true
false
BOOL
TRUE
FALSE
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.03.2011, 01:55

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru