281

Re: Цікаві задачі

leofun01 написав:
2andnot написав:
Люблю подібні задачки ...
Люблю подібні задачки, шкода що нових нема, то ж запропоную свою, мені її задавали на першому курсі на контрольну роботу. можливо комусь вона здаватиметься надто простою та типовою але мені вона сподобалась.
Є ряд натуральних чисел, від 1 до n(як показує практика n величиною  більше 10-12 краще не обирати), нехай це будуть числа від 1 до 5. вивести на консоль всі можливі комбінації. числа та комбінації не повторюються.
тобто наприклад

12345
14523
54312
і так далі
11234 буде невірним результатом
12345
12345 також буде невірним результатом якщо комбінація десь повторюватиметься

цей алгоритм можна використовувати не тільки для чисел.

Рішення мовою PHP:

<?php
    function print_all_int_permutations($columns, $maxValue)
    {
        echo 'columns = '.$columns.', maxValue = '.$maxValue." :<br/>\r\n\t";
        for($digits = array_fill(0, $columns, 1), $i = 0; $i >= 0; )
        {
            echo implode(', ', $digits)."<br/>\r\n\t";
            for($i = $columns; --$i >= 0 && ++$digits[$i] > $maxValue; )
                $digits[$i] = 1;
        }
        echo '<br/>';
    }
    print_all_int_permutations(5,5);
?>

В прикріпленому файлі функції f_while і f_for роблять одне й те саме (що і в наведеному тут коді), просто це був такий навчальний приклад для мого знайомого, щоб показати, що while і for працюють однаково.

Прихований текст
фу, у вас php...

erlang

L = [1,2,3,4,5],
[io:format("~p~p~p~p~p~n",[A,B,C,D,E]) || A <- L, B <- L, C <- L, D <- L, E <- L, A =/= B, A =/= C, A =/= D, A=/=E, B=/=C, B=/=D, B=/=E, C=/=D, C=/=E, D=/=E].
Прихований текст
трошки тупо, проте працює
Це ще не кінець. Це навіть не початок кінця. Але, можливо, це кінець початку.
Зростання мудрості можна точно вимірювати ступенем зменшення злоби.

https://coderhero.win/ Розбудовуємо інтернет разом!
Подякували: Betterthanyou, leofun012

282

Re: Цікаві задачі

0x9111A, так який все ж "красивий" розв'язок у пошуку двох відсутніх чисел у два проходи?

Подякували: leofun011

283

Re: Цікаві задачі

koala написав:

0x9111A, так який все ж "красивий" розв'язок у пошуку двох відсутніх чисел у два проходи?

1) Шукаємо суму чисел [1..N] по шкільній формулі і від неї віднімаємо суму вхідного масиву.
На виході сума відсутніх чисел, хай буде (x+y).
2) Оскільки числа не однакові, одне з них буде гаратновано <= (x+y)/2. Менше рівне щоб цілочисельне ділення запрацювало ( (3 + 4) / 2 = 3 ).
3) Використовуючи той самий метод що й у кроці 1, шукаємо x:
Тепер ми знаємо, що одне з чисел в діапазоні [1..(x+y)/2], а друге точно ні. Шукаємо суму чисел [1..(x+y)/2] по шкільній формулі і віднімаємо суму чисел з нашого масиво що підходять в цей діапазон.
4) Як знайти 'у' має бути зрозуміло тим хто дочитав :)

Графоманія

Maybe a = Just a | Nothing
Подякували: koala, 221VOLT2