Sirion
Гений-Говорун
Offline
Сообщений: 1095
СПАСИБО
-вы поблагодарили: 137
-вас поблагодарили: 278
|
 |
� : Сентябрь 30, 2011, 19:19:35 � |
|
Суть задачи такова: представим, что нам нужно написать программу, которая последовательно считывает с клавиатуры n целых чисел (каждое из которых не меньше единицы и не больше n) и определяет, являются ли они перестановкой чисел от 1 до n. Число n известно заранее, до написания программы.
Обычно такое пишется довольно просто. Можно, например, взять массив из n элементов, заполнить его нулями, а затем, считав число, присваивать соответствующему элементу единичку. Если в итоге все элементы стали единичными - значит, перестановка. Нет - значит нет.
Но тут нас поджидает засада: у нас ограничена память. У нас есть только две переменные типа unsigned short (принимающих значения от 0 до 216-1), причём одна из них используется как счётчик цикла, и ничего другого мы с ней сделать не можем.
Как нам проверить, являются ли введённые числа перестановкой? И для какого максимального N мы сможем это сделать?
|
|
|
Записан
|
sirion=irion+srion+rion+siion+iion+sion+ion+siron+iron+sron+ron+sion+ion+son+on+sirin+ +irin+srin+rin+siin+iin+sin+in+sirn+irn+srn+rn+sin+in+sn+n+sirio+irio+srio+rio+siio+ +iio+sio+io+siro+iro+sro+ro+sio+io+so+o+siri+iri+sri+ri+sii+ii+si+i+sir+ir+sr+r+si+i+s
|
|
|
buka
Гений
   
Offline
Сообщений: 960
СПАСИБО
-вы поблагодарили: 4
-вас поблагодарили: 120
|
 |
� Ответ #1 : Сентябрь 30, 2011, 20:49:21 � |
|
1. В принципе, если суммировать числа в виде к^к, то сумма будет уникальной, но много не насуммируешь  2. Я подумаю или можно просуммировать кубы. По теореме Ферма сумма двух кубов никогда не даст третий. Но может ли сумма каких-то к кубов быть равна сумме к других кубов - не знаю... 3. В принципе можно суммировать в виде (n-k)*n k-1. Тогда сумма в n-ичной системе счисления будет: 012345...(n-2)(n-1) и надо найти максимальное n, если эта сумма < 2 16Вопрос - или нельзя найти что-то компактнее чем п.1 или п.3...
|
|
� Последнее редактирование: Сентябрь 30, 2011, 21:12:19 от buka �
|
Записан
|
|
|
|
moonlight
Умник
  
Offline
Сообщений: 741
СПАСИБО
-вы поблагодарили: 19
-вас поблагодарили: 232
|
 |
� Ответ #2 : Октябрь 01, 2011, 14:02:47 � |
|
Можно 27. Если больше то это очень интересно.
|
|
|
Записан
|
Зачем откладывать на завтра то, что можно отложить на послезавтра?
|
|
|
moonlight
Умник
  
Offline
Сообщений: 741
СПАСИБО
-вы поблагодарили: 19
-вас поблагодарили: 232
|
 |
� Ответ #3 : Октябрь 01, 2011, 16:19:10 � |
|
В условии сказано что одна из переменных используется как счётчик цикла и больше с ней мы сделать ничего не можем. Я на это не обратил внимание и на цикл взял из неё 5 бит а остальные 11 вместе с 16 из второй переменной использовал для записи единичек. Если этого делать нельзя то решение отменяется. Но в этом случае непонятно зачем переменная цикла имеет тип unsigned short.
|
|
|
Записан
|
Зачем откладывать на завтра то, что можно отложить на послезавтра?
|
|
|
buka
Гений
   
Offline
Сообщений: 960
СПАСИБО
-вы поблагодарили: 4
-вас поблагодарили: 120
|
 |
� Ответ #4 : Октябрь 02, 2011, 01:13:21 � |
|
В принципе можно суммировать в виде 2 k-1 Это эквивалентно установке в 1 k-ого бита (что по-видимому имел в виду moonlight). Тогда для 16-и разрядного числа можно иметь 16 чисел - от одного до 16. Есть ли возможность бОльшей компактности? В принципе если не ограничивать размер самой программы - то можно Можно вообще обойтись без ячеек, построив n! ветвей программы,  но это уже будет безобразие, конечно 
|
|
� Последнее редактирование: Октябрь 02, 2011, 01:15:10 от buka �
|
Записан
|
|
|
|
moonlight
Умник
  
Offline
Сообщений: 741
СПАСИБО
-вы поблагодарили: 19
-вас поблагодарили: 232
|
 |
� Ответ #5 : Октябрь 02, 2011, 08:07:02 � |
|
По теореме Ферма сумма двух кубов никогда не даст третий. Но может ли сумма каких-то к кубов быть равна сумме к других кубов - не знаю...
таких вариантов очень много. например 1 3 + 2 3 + 4 3 + 8 3 + 9 3 + 12 3 = 3 3 + 5 3 + 6 3 + 7 3 + 10 3 + 11 3
|
|
|
Записан
|
Зачем откладывать на завтра то, что можно отложить на послезавтра?
|
|
|
zhekas
Гений-Говорун
Offline
Сообщений: 1035
СПАСИБО
-вы поблагодарили: 34
-вас поблагодарили: 487
|
 |
� Ответ #6 : Октябрь 02, 2011, 10:53:22 � |
|
Вопрос в том насколько ограничена n. Если n - ограничена только типом переменной, то всё вышепредложенное не работает
|
|
|
Записан
|
|
|
|
moonlight
Умник
  
Offline
Сообщений: 741
СПАСИБО
-вы поблагодарили: 19
-вас поблагодарили: 232
|
 |
� Ответ #7 : Октябрь 02, 2011, 20:03:37 � |
|
Есть такой вариант. N=11. Находим сумму значений f(n)=n4+4n3+6n2+6n. Сумма 60830 получается только если все n различны.
|
|
|
Записан
|
Зачем откладывать на завтра то, что можно отложить на послезавтра?
|
|
|
zhekas
Гений-Говорун
Offline
Сообщений: 1035
СПАСИБО
-вы поблагодарили: 34
-вас поблагодарили: 487
|
 |
� Ответ #8 : Октябрь 02, 2011, 20:06:39 � |
|
Есть такой вариант. N=11. Находим сумму значений f(n)=n4+4n3+6n2+6n. Сумма 60830 получается только если все n различны.
а если n порядка 2^16
|
|
|
Записан
|
|
|
|
General
Умник
  
Offline
Сообщений: 681
СПАСИБО
-вы поблагодарили: 47
-вас поблагодарили: 164
|
 |
� Ответ #9 : Октябрь 03, 2011, 20:38:22 � |
|
А что если этой переменной делать xor (счётчик xor введённое число)?
|
|
|
Записан
|
|
|
|
General
Умник
  
Offline
Сообщений: 681
СПАСИБО
-вы поблагодарили: 47
-вас поблагодарили: 164
|
 |
� Ответ #10 : Октябрь 04, 2011, 16:09:03 � |
|
Ведь и вправду! (честно, раньше эта задача мне не встречалась). Операция xor коммуникативна и ассоциативна. И, т.к. n xor n = 0, то номера и введённые числа должны себя взаимно уничтожить, если введённые числа являются перестановкой номеров и переменная 2 обратится в 0.
|
|
|
Записан
|
|
|
|
Sirion
Гений-Говорун
Offline
Сообщений: 1095
СПАСИБО
-вы поблагодарили: 137
-вас поблагодарили: 278
|
 |
� Ответ #11 : Октябрь 04, 2011, 16:28:05 � |
|
контрпример n=5, ввод: 3,3,3,3,1
|
|
|
Записан
|
sirion=irion+srion+rion+siion+iion+sion+ion+siron+iron+sron+ron+sion+ion+son+on+sirin+ +irin+srin+rin+siin+iin+sin+in+sirn+irn+srn+rn+sin+in+sn+n+sirio+irio+srio+rio+siio+ +iio+sio+io+siro+iro+sro+ro+sio+io+so+o+siri+iri+sri+ri+sii+ii+si+i+sir+ir+sr+r+si+i+s
|
|
|
General
Умник
  
Offline
Сообщений: 681
СПАСИБО
-вы поблагодарили: 47
-вас поблагодарили: 164
|
 |
� Ответ #12 : Октябрь 04, 2011, 17:31:33 � |
|
Действительно... Спасибо, подумаю. Но наверняка побитовые операции вовлечены.
|
|
|
Записан
|
|
|
|
Sirion
Гений-Говорун
Offline
Сообщений: 1095
СПАСИБО
-вы поблагодарили: 137
-вас поблагодарили: 278
|
 |
� Ответ #13 : Октябрь 04, 2011, 18:11:32 � |
|
кстати, чуть не проглядел Операция xor коммуникативна
хоть не коммуникабельна))
|
|
|
Записан
|
sirion=irion+srion+rion+siion+iion+sion+ion+siron+iron+sron+ron+sion+ion+son+on+sirin+ +irin+srin+rin+siin+iin+sin+in+sirn+irn+srn+rn+sin+in+sn+n+sirio+irio+srio+rio+siio+ +iio+sio+io+siro+iro+sro+ro+sio+io+so+o+siri+iri+sri+ri+sii+ii+si+i+sir+ir+sr+r+si+i+s
|
|
|
General
Умник
  
Offline
Сообщений: 681
СПАСИБО
-вы поблагодарили: 47
-вас поблагодарили: 164
|
 |
� Ответ #14 : Октябрь 04, 2011, 20:37:20 � |
|
ой, тьфу, коммутативна, конечно же
|
|
|
Записан
|
|
|
|
|