Re[5]: Интересные задачки для программистов
От: Smal Россия  
Дата: 08.09.06 17:12
Оценка:
Здравствуйте, rg45, Вы писали:

R>Отличается существенно. Во втором случае значение указателя p меняется: он всю дорогу указывает на массив buffer. Во втором же случае мы добиваемся того, что указатель p начинает указывать на строковый литерал!


Хм. Понятно. Спасибо.
С уважением, Александр
Re[5]: Интересные задачки для программистов
От: rg45 СССР  
Дата: 08.09.06 17:14
Оценка:
"rg45" <49596@users.rsdn.ru> wrote in message news:2101249@news.rsdn.ru...
>
> "Smal" <54740@users.rsdn.ru> wrote in message news:2101246@news.rsdn.ru...
>> Здравствуйте, rg45, Вы писали:
>>
>> R>
>> R>  char buffer[256];
>> R>  char* p = buffer;
>> R>  const char** cpp = &p; //Предположим, что это преобразование разрешено
>> R>  *cpp = "Hello, world"; //Теперь указатель p указывает на константную строку!!!
>> R>  p[0] = '!'; //Изменяем первый символ массива литерала "Hello World!!!"
>> R>

>>
>> Но ведь это ничем не отличается от
>>
>>  char buffer[256];
>>  char* p = buffer;
>>  const char* cpp = p; //Это преобразование разрешено
>>  cpp = "Hello, world"; //Указатель p попрежнему направлен на buffer
>>  p[0] = '!'; //Изменяем первый символ в массиве buffer
..>

>
> Отличается существенно. Во втором случае значение указателя p меняется: он всю дорогу указывает на массив buffer. В первом же случае мы добиваемся того, что указатель p начинает указывать на строковый литерал!
Posted via RSDN NNTP Server 2.0
--
Справедливость выше закона. А человечность выше справедливости.
Re[6]: Интересные задачки для программистов
От: greenya Украина  
Дата: 08.09.06 19:56
Оценка:
Здравствуйте, VsevolodC, Вы писали:

VC>Здравствуйте, andyJB, Вы писали:


JB>>Здравствуйте, VsevolodC, Вы писали:


VC>>>и оно выполняется, потому что ранее названных нет.

JB>>И что? Второй назовет произвольное число, отличное от 1, и игра продолжится.

VC>Действительно, не сообразил. Однако можно первым назвать -1.


я думаю если там сказано "разменная монета", то это само собой подразумевает что минимальное число это 1. а не 0 и не -1.
Re[3]: Интересные задачки для программистов
От: seafresh  
Дата: 22.09.06 15:52
Оценка:
Здравствуйте, FoolS.Top, Вы писали:
G>>>15. Дано число. Определить, является ли оно целой степенью 2. (Microsoft и другие)
FT>Об этой задаче здесь уже было. Напомню решение

FT>
FT>if (!((x - 1) & x))
FT>{
FT>   // x - целая степень 2
FT>}
FT>


все понятно, но 0 исключение или как?
Государство должно защищать свободу и право, в этом его оправдание.
Re: Интересные задачки для программистов
От: seafresh  
Дата: 22.09.06 17:48
Оценка:
G>22. Стандартный способ "честного" деления пирога: первый участник делит, второй выбирает себе один из кусков, оставшийся кусок достается первому. Что делать если участников 3? (Мартин Гарднер, чтоли?)

1-ой делит на две части, 2-ой делит любой кусок на две части, 3 выбирает себе любой кусок от последнего деления, оставшийся забирает 2-ой.
2-ой делит на две части кусок от первого деления и т.д. после трех таких процедур у каждого будет по 2 куска.
Государство должно защищать свободу и право, в этом его оправдание.
Re: Интересные задачки для программистов
От: seafresh  
Дата: 22.09.06 18:03
Оценка:
Здравствуйте, Grammer, Вы писали:
G>25. У вас есть зажигалка и веревка. Если веревку поджечь с конца, то она вся сгорит за полчаса. Как отмерить, при помощи этих двух предметов 15 минут? Важное обстоятельство: Веревка горит неравномерно, где-то быстрее, где-то медленнее. (очень популярная задача)

Поджечь с двух сторон, как только вся веревка сгорит пройдет 15 минут.
Государство должно защищать свободу и право, в этом его оправдание.
Re[2]: Интересные задачки для программистов
От: kan Великобритания  
Дата: 25.09.06 12:12
Оценка:
seafresh wrote:

> 1-ой делит на две части, 2-ой делит любой кусок на две части, 3 выбирает

> себе любой кусок от последнего деления, оставшийся забирает 2-ой.
Так не годится, если 2-й и 3-й будут в сговоре, 1-му может ничего не остаться.
Допустим есть 100 частей. 1-ый делит на 34 и 66. 2-й делит кусок 34 на 1 и 33. 3-й забирает 66, 2-й забирает 33 , а 1-му
достаётся 1 частичка, и он ничего сделать не может.

> 2-ой делит на две части кусок от первого деления и т.д. после трех таких процедур у каждого будет по 2 куска.

Непонятно что подразумевается под "и т.д"?
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[4]: Интересные задачки для программистов
От: Wass  
Дата: 26.09.06 14:42
Оценка:
Здравствуйте, Кодт, Вы писали:


К>Возьмём некоторый начальный набор M0. s0=start(M0), g0=gcd(M0).

К>Разобьём множество натуральных чисел на две части: V0 = [1..s0*g0], N0 = N\V0.

К>Предположим, что наша игра бесконечна. Это значит, что рано или поздно мы начнём делать ходы из N1. (Поскольку N0 конечно).


Что такое N1? Почему множество N0 конечно? "\" означает разность множеств или нет?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Интересные задачки для программистов
От: Кодт Россия  
Дата: 27.09.06 10:23
Оценка:
Здравствуйте, Wass, Вы писали:

W>Что такое N1? Почему множество N0 конечно?


Да, интересно... мне уже сходу не разобраться в том, что я понаписал тогда.
Видимо, переименовывал что-то в процессе да недопереименовал.

W> "\" означает разность множеств или нет?


Да, разность.



Попробую восстановить ход мысли и переписать заново. Чуть позже.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[3]: Интересные задачки для программистов
От: seafresh  
Дата: 28.09.06 17:30
Оценка:
Здравствуйте, kan, Вы писали:

kan>seafresh wrote:

>> 2-ой делит на две части кусок от первого деления и т.д. после трех таких процедур у каждого будет по 2 куска.
kan>Непонятно что подразумевается под "и т.д"?

Первый делит целый торот на две части, второй выбирает любую часть и делит ее на две части, третий выбирает любую часть из двух от второго, остаток для второго.
Второй делит часть на две части, третий выбирает любую часть и делит ее на две части, первый выбирает любую часть из двух от третьего, остаток для третьего.
Первый делит часть на две части, второй выбирает любую часть из двух от первого, остаток для первого.
Таким образом у каждого будет по два куска, но тут есть один недостаток для первого едока.

А вот кстати второй дискретный вариант, первый делит торт на три куска, затем второй берет себе любой кусок, третий берет себе любой из оставшихся двух,
а последний достается первому.
Т.е. нет никакой поножовщины, из-за того, что кому-то скорость ножа показалась слишком быстрой, или что кто-то охрип в неподходящий момент, или что кто-то пропел с хором с кем-то.
Государство должно защищать свободу и право, в этом его оправдание.
Re[2]: Интересные задачки для программистов
От: Максим Алексейкин США  
Дата: 06.10.06 13:26
Оценка:
Здравствуйте, VsevolodC, Вы писали:

VC>Здравствуйте, Grammer, Вы писали:


G>>2a. Два игрока играют по очереди называют число, достоинство воображаемой разменной монеты. При этом нужно, чтобы это число нельзя было выплатить при помощи ранее называнных монет. Проигрывает назвавший число 1. Доказать, что игра не может продолжаться бесконечно. (J.H.Conway)


VC>Очевидно, выигрывает первый игрок, назвав 0


есть множество монет М из натуральных чисел [2..inf]
возьмем произвольное n из M.
произведения С*n (где С — натуральная константа) покроет с шагом n все значения от n
             n                  n
    +-----------------+------------------+
    |                 |                  |
....n................2n.................3n..........

надо доказать, что все числа из диапозона [n..2n] прокроют все числа из диапозона [2n..3n] и всех последующих
.
2n + k = n + n + k

где k < n
т.е. вариантов даже не n, а намного меньше
вывод: перебрав варианты из [n..2n] придется перейти к [2..n]

те вариантов не больше чем 2n.

даже если не закрывать всех чисел в текущем диапозоне, а переходить к следующему, то с каждым названным числом мы будем закрывать числа во всех диапозонах впереди текущего — рано или поздно закроем все и придется двигаться назад.
Re[2]: Интересные задачки для программистов
От: Максим Алексейкин США  
Дата: 06.10.06 14:11
Оценка: :)
Здравствуйте, VsevolodC, Вы писали:

VC>Здравствуйте, Grammer, Вы писали:


G>>32. Как передвинуть гору Фудзи? (Microsoft)


VC>1. Метод теории относительности: передвинуть наблюдателя


VC>2. Метод малых приращений: положить камень на вершину горы + епсилон


VC>3. Топонимический метод: поменять названия Фудзи с другой горой


VC>4. Координатный метод: поменять систему координат


VC>5. Метрический метод: померить координаты горы 2 раза, значения в 99.9% случаев будут разные


VC>6. Геологический метод: дождаться очередных геологических изменений в регионе


VC>фантазия закончилась



миллион китайцев за чашку риса сдвинут ее куда угодно причем до оконцания текущей пятилетки
Re[4]: Интересные задачки для программистов
От: Polosatiy  
Дата: 09.10.06 09:22
Оценка:
7. У вас есть 8 с виду одинаковых монет, одна из которых, тем не менее, фальшивая. Фальшивая монета чуть тяжелее, но во всем остальном идентична настоящим. У вас также есть, в лучших традициях жанра, весы с чашечками, как у богини правосудия. За какое минимальное число взвешиваний можно определить фальшивку? (популярная задача)

Решается за 2 взвешивания.
Делим 8 монет на 3 кучки. 3 + 3 + 2.
Взвешиваем 3 и 3. Варианты:
— Если кучки равны, значит их убираем и взвешиваем оставшиеся 2 монеты.
— Если какая-то кучка перевешивает, то из этой кучки берём 2 монеты и взвешиваем. Если они равны, то та монета, которая осталась — фальшивая. Если какая-то монета перевешивает, то она и есть фальшивая.
Re[4]: Интересные задачки для программистов
От: Максим Алексейкин США  
Дата: 10.10.06 09:20
Оценка:
Здравствуйте, seafresh, Вы писали:

S>Здравствуйте, kan, Вы писали:


S>А вот кстати второй дискретный вариант, первый делит торт на три куска, затем второй берет себе любой кусок, третий берет себе любой из оставшихся двух,

S>а последний достается первому.
S>Т.е. нет никакой поножовщины, из-за того, что кому-то скорость ножа показалась слишком быстрой, или что кто-то охрип в неподходящий момент, или что кто-то пропел с хором с кем-то.

немного надо дополнить:
2й и 3й должны сложить свои куски и поделить по новой на двоих
Re[4]: Интересные задачки для программистов
От: kan Великобритания  
Дата: 10.10.06 10:02
Оценка:
seafresh wrote:

> Первый делит целый торот на две части, второй выбирает любую часть и

> делит ее на две части, третий выбирает любую часть из двух от второго,
> остаток для второго.
> Второй делит часть на две части, третий выбирает любую часть и делит ее
> на две части, первый выбирает любую часть из двух от третьего, остаток
> для третьего.
> Первый делит часть на две части, второй выбирает любую часть из двух от
> первого, остаток для первого.
> Таким образом у каждого будет по два куска, но тут есть один недостаток
> для первого едока.
Что-то слишком сложно. Но деление на две части/объединение 2-х частей каждый раз, по-моему никак не даст 1/3 через
конечное число шагов.

> А вот кстати второй дискретный вариант, первый делит торт на три куска,

> затем второй берет себе любой кусок, третий берет себе любой из
> оставшихся двух, а последний достается первому.
Первый и второй в сговоре. Первый делит 100 на 98/1/1 — второй забирает 98, третьему достаётся только 1.
Третьим будешь?

> Т.е. нет никакой поножовщины, из-за того, что кому-то скорость ножа

> показалась слишком быстрой, или что кто-то охрип в неподходящий момент,
> или что кто-то пропел с хором с кем-то.
Неа, не работает.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[5]: Интересные задачки для программистов
От: kan Великобритания  
Дата: 10.10.06 10:13
Оценка:
Максим Алексейкин wrote:

> S>А вот кстати второй дискретный вариант, первый делит торт на три

> куска, затем второй берет себе любой кусок, третий берет себе любой из
> оставшихся двух,
> S>а последний достается первому.
> немного надо дополнить:
> 2й и 3й должны сложить свои куски и поделить по новой на двоих
Так вроде работает.
Хотя я слышал другой вариант решения, легко обобщаемый на любое кол-во. Вначале двое делят между собой, потом каждый из
них делит свою долю на 3 части. Третий выбирает у каждого по одному кусочку.

И вместо торта делили мешок золотого песка, который позволяет делить/объединять доли легче чем торт.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[2]: Интересные задачки для программистов
От: ArtemGorikov Австралия жж
Дата: 13.10.06 11:28
Оценка: -1
Здравствуйте, ghost92, Вы писали:

G>Здравствуйте, Grammer, Вы писали:


G>>7. У вас есть 8 с виду одинаковых монет, одна из которых, тем не менее, фальшивая. Фальшивая монета чуть тяжелее, но во всем остальном идентична настоящим. У вас также есть, в лучших традициях жанра, весы с чашечками, как у богини правосудия. За какое минимальное число взвешиваний можно определить фальшивку? (популярная задача)

G>2 достаточно. можно и с 9ю монетами справиться.

2 недостаточно. 8->4->2. Итого 3 сравнения.
Re: Интересные задачки для программистов
От: Smal Россия  
Дата: 27.10.06 08:42
Оценка:
Здравствуйте, Grammer, Вы писали:

G>2a. Два игрока играют по очереди называют число, достоинство воображаемой разменной монеты. При этом нужно, чтобы это число нельзя было выплатить при помощи ранее называнных монет. Проигрывает назвавший число 1. Доказать, что игра не может продолжаться бесконечно. (J.H.Conway)


А кто-нибудь решил эту задачу? Я решение придумал, но может быть можно проще.
С уважением, Александр
Re[2]: Интересные задачки для программистов
От: Максим Алексейкин США  
Дата: 27.10.06 11:46
Оценка:
Здравствуйте, Smal, Вы писали:

на пальцах здесь
Автор: Максим Алексейкин
Дата: 06.10.06
Re[3]: Интересные задачки для программистов
От: Smal Россия  
Дата: 30.10.06 16:18
Оценка:
Здравствуйте, Максим Алексейкин, Вы писали:

МА>Здравствуйте, Smal, Вы писали:


МА>на пальцах здесь
Автор: Максим Алексейкин
Дата: 06.10.06

ИМХО, это решение неверно. Непонятно, почему нам удасться закрыть хотябы один
диапазон вида [kn, (k+1)n].

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

Всегда есть некоторое простое число, которое больше всех названных чисел. Оно не покрыто не одним числом.
А почему его можно покрыть линейной комбинацией этих чисел, совершенно непонятно.
С уважением, Александр
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.