Cztery cyferki: zagadka

Dziś prościutka zagadka.

Mamy do dyspozycji dwie trójki i dwie ósemki:

3, 3, 8, 8

Zadaniem jest ustawić je w odpowiedniej kolejności tak, by z pomocą czterech podstawowych operatorów matematycznych w wyniku dostać 24.

Dopuszczalne operatory to: + (dodawanie), - (odejmowanie lub zmiana znaku na przeciwny), / (dzielenie) oraz * (mnożenie). Wolno też używać nawiasów w celu wymuszenia właściwej kolejności działań.

I to wszystko. Żadnych pierwiastków, logarytmów, żadnego zaokrąglania, całek, silni ani innych cudaków. Tylko cztery podstawowe działania plus nawiasy.

Czas - start!

4 komentarze

  1. Najbliżej oczekiwanej wartości była taka kombinacja: 8.0/(3.0- 8.0/ 3.0) = 23,99995200009
    jeszcze sprawdzę, dla podwójnych nawiasów…

    set nocount on
    declare @res table (komb varchar(100), wynik float);
    declare @txt varchar(100);

    DECLARE @cur CURSOR;
    SET @cur= CURSOR FOR

    with licz as (select 3.0 x union select 8.0),
    znaki as (select ‘+’ z union select ‘-‘ union select ‘*’ union select ‘/’ ),
    naw as (select ‘ ‘ n union select ‘(‘ union select ‘)’)
    select concat (n1.n, a.x, z1.z, n2.n, b.x, z2.z, n3.n, c.x, z3.z, n4.n, d.x, n5.n) txt
    from licz a, licz b, licz c, licz d, znaki z1, znaki z2, znaki z3,
    naw n1, naw n2, naw n3, naw n4, naw n5
    where a.x* b.x* c.x* d.x =576;

    open @cur
    FETCH next FROM @cur INTO @txt

    WHILE @@fetch_status = 0
    BEGIN
    begin try
    insert into @res
    exec(‘select ”’[email protected]+”’ kombinacja,’ + @txt +’wynik’);
    end try

    begin catch
    insert into @res(komb)
    exec(‘select ”’[email protected]+”’ kombinacja’);
    end catch
    FETCH next FROM @cur INTO @txt
    END

    close @cur;
    deallocate @cur;

    select * from @res
    where wynik is not null
    order by wynik;

    1. Ładnie! Rozwiązanie siłowe, ale jak najbardziej poprawne. Pamiętaj, że docelowo liczysz to matematycznie, bez procesorów, błędów zaokrągleń itd.

Leave a Comment

Twój adres e-mail nie zostanie opublikowany.