Страница 1 из 2

Вопрос с интервью

Добавлено: 22 сен 2006, 10:07
nemiga
Дана программа (псевдокод):

Код: Выделить всё

integer N; N -- целое. Разрядность велика, но конечна

input N; юзер вводит начальное число с клавиатуры

1000; Метка -- начало цикла

if Even(N)=true then N:=N/2 else N:=3*N+1; Если N четное, то разделить его пополам, иначе утроить и прибавить 1

print N; вывод нового значения N

goto 1000; возврат в начало цикла на метку 1000
Вопрос: Каким условиям должно удовлетворять входное число N, чтобы при выполнении этой программы не произошло переполнение?

Я ответа не знаю :-(

.

Хе хе

Добавлено: 22 сен 2006, 10:32
aissp
Как кодер программисту

n=-1;
Я даже больше скажу переполнится на первом же шаге

Re: Хе хе

Добавлено: 22 сен 2006, 10:44
nemiga
aissp писал(а):Как кодер программисту
n=-1;
А еще?

Как найти метод обнаружения таких чисел?

.

Добавлено: 22 сен 2006, 10:46
aissp
А вот как программист, я еще думаю :)

Re: Хе хе

Добавлено: 22 сен 2006, 10:53
Otto
aissp писал(а):n=-1
А где здесь переполнение?

Добавлено: 22 сен 2006, 11:00
aissp
unisgned char n = -1;

unsigned char q = n*3+1....

А причем тут unsigned?

Добавлено: 22 сен 2006, 11:06
nemiga
aissp писал(а):unisgned char n = -1;
unsigned char q = n*3+1....
А причем тут unsigned?

.

Re: А причем тут unsigned?

Добавлено: 22 сен 2006, 11:16
Otto
nemiga писал(а):А причем тут unsigned?
Вот и я о том же, в условии сказано - целое число, т.е. N может быть и отрицательным.

Re: А причем тут unsigned?

Добавлено: 22 сен 2006, 11:20
nemiga
Otto писал(а):
nemiga писал(а):А причем тут unsigned?
Вот и я о том же, в условии сказано - целое число, т.е. N может быть и отрицательным.
Тут мне подсказывают из другой конфы: Оказывается некоторые всерьез думают, что отрицательные числа не могут быть четными или нечетными :lol:

.

Добавлено: 22 сен 2006, 11:33
aissp
OK разжуем
unsigned char q = -1;
unsigned char s = q>>2;
char p = s;
char result = s*3+1;

Вместо типа поставьте люьой другой требуемый в задаче
s=63 p=63 result != 190

если ето не переполнение то я не знаю что это такое. Или по другому, у мальчика Васи было 63 рубля (он добился етих рублей махинациями с числами скажем на бирже) после етого мальчик вася пошел в банк Хопер инвест, где ему сказали что всего за месяц утроят его капитал и даже положут ему сверху рупль. Мальчик Вася расчитывает получить 190 руплев, однако в конце месяца к нему приходят братки с паяльничком и требуют 66 руплев долга, которые он задолжал Хопру инвест. Мальчик Вася плаятит ети деньги, потом находит программиста сидорова и вставляет ему кипятильник в рот. Может ето и не прполнение, но программисту сидорову с паяльником от етого не легчее

Добавлено: 22 сен 2006, 11:37
Otto
У тебя разрядность - байт и переполнение из-за знака. Это совсем другая задачка.

Исходная задачка гораздо интереснее.
У кого еще какие мысли есть?

Добавлено: 22 сен 2006, 11:51
nemiga
Otto писал(а):У тебя разрядность - байт и переполнение из-за знака. Это совсем другая задачка.

Исходная задачка гораздо интереснее.
У кого еще какие мысли есть?
Все правильно, разрядность предполагается очень большая.

По существу, нужно определить, при каких N последовательность выводимымых на печать чисел стремится к бесконечности.

.

Добавлено: 22 сен 2006, 11:56
aissp
Вообще про байт там не слова - вместо байта можно использовать

MonsterVasjaBigDigit тип. Опять же если не заметил, я написал что отвеячаю как кодер. Мне надо было добитьсе перполнения, я его добился. Если надо что то другое, то и задачу надо ставить другую. Например так, существует ли последовательность чисел, правила генерации которой описаны в посте немиги и предел которой при n стремяцемся к бесконечности тоже стремиться к ней. Но согласись ето совсем другая задача. Скажу больше, если тебя попросили написать программу а ты начал ее с проектирование операционной системы - то ето минус для программиста как мне кажется.

Ок ок отвечаю точно на условие задачи.

Вопрос: Каким условиям должно удовлетворять входное число N, чтобы при выполнении этой программы не произошло переполнение?


Ответ: число должно быть степенью двойки.

Re: Вопрос с интервью

Добавлено: 22 сен 2006, 12:20
ajkj3em
nemiga писал(а):

Код: Выделить всё

if Even(N)=true then N:=N/2 else N:=3*N+1;
это вопрос на общее образование. это так называемые числа-градины
(hailstone numbers). http://mathworld.wolfram.com/CollatzProblem.html

IIRC среди начальных условий есть т.н. резонаторы, но формула для
них не известна. так что ответ на оригинальный вопрос -


Re: Вопрос с интервью

Добавлено: 22 сен 2006, 16:11
Otto
ajkj2em писал(а):это вопрос на общее образование. это так называемые числа-градины
(hailstone numbers). http://mathworld.wolfram.com/CollatzProblem.html
Спасибо! Интересная инфа. В общем, пока ХЗ :D