|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 12:28 am
| Автор |
Съобщение |
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 9:14 am Мнения: 5298
|
 задачка ;)
Да се извърти цикъл с 256 итерации чрез for() и една еднобайтова променлива. Break в тялото на цикъла и допълнителни променливи не са позволени. Няма награда - само за умствена гимнастика За най-напредналите: цикъл с 511 итерации чрез само една еднобайтова променлива
_________________ 'просто' е технически синоним на 'красиво'
|
| Сря Юни 20, 2012 2:05 pm |
|
 |
|
CarBeta
Ранг: Форумен бог
Регистриран на: Пет Май 01, 2009 4:01 pm Мнения: 1438
|
 Re: задачка ;)
Два цикъла позволени ли са ??
|
| Сря Юни 20, 2012 3:02 pm |
|
 |
|
ike
Ранг: Форумен бог
Регистриран на: Пет Фев 04, 2005 9:59 pm Мнения: 6019 Местоположение: София
|
 Re: задачка ;)
No sweat. Pascal FTW. Edit: намерих он-лайн компилатор, ако искате може да тествате кода: http://www.onlinecompiler.net/pascalТова мога да го направя и без променлива, само ми трябва микроконтролера да има 8 битов UP/DOWN mode таймер. 
_________________ Warriors of the Night, ASSEMBLER!!!
|
| Сря Юни 20, 2012 3:35 pm |
|
 |
|
loser
Ранг: Минаващ
Регистриран на: Съб Ное 12, 2011 9:21 pm Мнения: 62
|
 Re: задачка ;)
ако може да се правят по две итерации в тялото на цикъла, за да са точно 511, може нещо такова: (тук за 'итерация' се приема работата, която се върши ако се замести печатането на низ 'итерация х' с някаква реална работа; така сметката би трябвало да излиза, и броят на изпълненията да е 511)
|
| Сря Юни 20, 2012 7:02 pm |
|
 |
|
Пушека
Ранг: Новодошъл
Регистриран на: Пон Апр 16, 2012 9:05 pm Мнения: 182
|
 Re: задачка ;)
Два цикъла с една променлива(byte), ако е позволено??  Идеята му е веднъж бори нагоре, после обратно до 0 и излиза...
|
| Сря Юни 20, 2012 10:33 pm |
|
 |
|
anrieff
Ранг: Новодошъл
Регистриран на: Нед Ное 16, 2008 1:16 pm Мнения: 179 Местоположение: София
|
 Re: задачка ;)
Ако това е истинското решение на задачата с 511, както го е написал Пушека, да ме прощавате, ама задачата е мега некоректно зададена.
Искате ли една малко по-трудна?
Имате масив с цели числа (могат да са и големи, 32-битови примерно). В него масив, всички числа се срещат точно два пъти, с изключение на едно от тях, което го има само веднъж. Примерно { 3, 188, 55, 55, 3 }. Търси се кое е самотното. Не се разрешава сортиране. O(N) сложност се гони.
_________________ 2 + 2 = 5, при много големи стойности на 2.
|
| Сря Юни 20, 2012 11:35 pm |
|
 |
|
ike
Ранг: Форумен бог
Регистриран на: Пет Фев 04, 2005 9:59 pm Мнения: 6019 Местоположение: София
|
 Re: задачка ;)
Задачата е елементарна. Правиш един масив от 4 300 000 000 бита. Четеш число от масива и гледаш бита, който съответства на числото ако е 0 прибавяш числото към временна променлива, ако е 1 бита, правиш го на 0 и изваждаш числото от временната променлива. накрая временната променлива е със стойност самотното число.
_________________ Warriors of the Night, ASSEMBLER!!!
|
| Чет Юни 21, 2012 12:00 am |
|
 |
|
anrieff
Ранг: Новодошъл
Регистриран на: Нед Ное 16, 2008 1:16 pm Мнения: 179 Местоположение: София
|
 Re: задачка ;)
А, не съм догледал, числата били 64-битови 
_________________ 2 + 2 = 5, при много големи стойности на 2.
|
| Чет Юни 21, 2012 1:30 am |
|
 |
|
Reader
Ранг: Новодошъл
Регистриран на: Нед Апр 17, 2005 9:23 am Мнения: 112
|
 Re: задачка ;)
Хм, не мога да си представя какъв трик може да се приложи, че да постигнеш O(N). В най-добрия случай виждам O(N^2/2).
|
| Чет Юни 21, 2012 8:33 am |
|
 |
|
anrieff
Ранг: Новодошъл
Регистриран на: Нед Ное 16, 2008 1:16 pm Мнения: 179 Местоположение: София
|
 Re: задачка ;)
Дори само със сортиране вече е O(N logN), но, както казах, има и по-добро решение 
_________________ 2 + 2 = 5, при много големи стойности на 2.
|
| Чет Юни 21, 2012 10:44 am |
|
 |
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 9:14 am Мнения: 5298
|
 Re: задачка ;)
 |  |  |  | anrieff написа: Ако това е истинското решение на задачата с 511, както го е написал Пушека, да ме прощавате, ама задачата е мега некоректно зададена.
Искате ли една малко по-трудна?
Имате масив с цели числа (могат да са и големи, 32-битови примерно). В него масив, всички числа се срещат точно два пъти, с изключение на едно от тях, което го има само веднъж. Примерно { 3, 188, 55, 55, 3 }. Търси се кое е самотното. Не се разрешава сортиране. O(N) сложност се гони. |  |  |  |  |
Абе аз си мислех, че като съм писал for() всеки ще разбере, че става дума за C-код. На Паскал и Бейсик и бабите могат да го направят това. Освен това съм писал "итерации" т.е. не е казахо, че променливата трябва да се извърти последователно. Е, след тая подсказка... А това с масива... не съм го пробвал, само като идея - ако извъртиш целия масив и правиш XOR на всички числа в него, би трябвало накрая да остане това, което е самотно, тъй като другите ще са се нулирали побитово. Ето в примера, който си дал, резултатите след всеки XOR: 0 (начално), 3, 191, 136, 191, 188 (краен резултат)
_________________ 'просто' е технически синоним на 'красиво'
|
| Чет Юни 21, 2012 10:52 am |
|
 |
|
Reader
Ранг: Новодошъл
Регистриран на: Нед Апр 17, 2005 9:23 am Мнения: 112
|
 Re: задачка ;)
Мда-а-а… 
|
| Чет Юни 21, 2012 11:21 am |
|
 |
|
t_i_t_o
Ранг: Почетен член
Регистриран на: Вто Окт 25, 2005 10:54 am Мнения: 896
|
 Re: задачка ;)
uint8_t ii;
for (ii = 0; ii; ii++) do_something();
???
|
| Чет Юни 21, 2012 4:23 pm |
|
 |
|
ike
Ранг: Форумен бог
Регистриран на: Пет Фев 04, 2005 9:59 pm Мнения: 6019 Местоположение: София
|
 Re: задачка ;)
Това тества ли го? Ако да кажи с кой компилатор.
_________________ Warriors of the Night, ASSEMBLER!!!
|
| Чет Юни 21, 2012 4:34 pm |
|
 |
|
t_i_t_o
Ранг: Почетен член
Регистриран на: Вто Окт 25, 2005 10:54 am Мнения: 896
|
 Re: задачка ;)
Мда няма да стане щото условието се проверява в началото а не в края... с do-while ще стане...
|
| Чет Юни 21, 2012 4:52 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 5 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|