Re: Задача междинна (Бикове И Крави)
  Нещо май не съм разбрал условието. Според мен няма такова число.
Най-голямото е 9876 което има произведение 3024. Т.е. онова с 4 крави задължително има цифра 0,1 или 2 (защото от произведението се вади нещо си). 0 не може да има - произведението е 0 - става отрицателно. Остава 1 и 2. Но 2х7х8х9=1008.
Извод такова животно няма :shocked:
 
 //едит
Леле какво съм чел....като дявола евангелието... :huh:
За каки съм си мислел, а не за крави............. ;)
 
     Re: Задача междинна (Бикове И Крави)
  Не е това условието.
Пример: ако числото е 1073.
То се получава от 37.29
(37 + 29 = 66)
Та, условието е:
1073 - 66 - (1.0.7.3.6.6)/2 = 1007.
Ако това 1007 и 1073 имаха 4 крави (а не 1 крава и 2 бика), щеше да е решение.
 
//
Аз мога да добавя само, че ако M = 2, тогава K се дели на 4.
От това получавам, че L е нечетно, значи P има поне една нечетна цифра, значи N има поне една цифра >=5...
А ако и M и N са нечетни прости, тогава нашето число завършва на 1, 3, 7 или 9.
     Re: Задача междинна (Бикове И Крави)
  Стигам до простия извод, че не може да има 0 нито в произведението M.N, нито в сбора M+N (обезсмисля се полупроизведението) и M.N не може да започва с 1, защото кравите ще трябва да започват с 0, а 0 не може да участва. 
Но са прекалено много възможностите и защо е единствено решението - нямам идея. :huh:
 
//Едното просто число не може да е 2, защото полупроизведението става много голямо.
Остава да търсим нечетно число, без нули, незапочващо с 1, с различни цифри. :081:
     Re: Задача междинна (Бикове И Крави)
  17 * 127 = 2159 - отговорът
числото с кравите е 1295
 
Ето как го реших това:
код:
  Код:
 
List = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 
                79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 
                167, 173, 179, 181, 191, 193, 197, 199] &
take_result (List, Result)
 
take_result ([], "error") :-
        !
;
 
take_result ([Numb | Tail], Result) :-
        Result = compute list ([Product, Numb, Elmt]) where
                                (
                                m:lst.member (Tail, Elmt) &
                                Product == Numb * Elmt &
                                Product >= 1000 &
                                Product <= 9999 &
                                Sum == Numb + Elmt &
                                get_mult_digits (Product, Dig_Prod) &
                                get_mult_digits (Sum, Dig_Sum) &
                                CowsBulls == Product - Sum - ?(Dig_Prod * Dig_Sum) / 2 &
                                CowsBulls >= 1000 &
                                CowsBulls <= 9999 &
                                compare_cows (Product, CowsBulls, Cows) &
                                Cows = 4
                                ) &
        Result <> [] &
        !
;
 
take_result ([Numb | Tail], Result) :-
        take_result (Tail, Result)
;
 
get_mult_digits (Number, Res) :-
        Num_str = to_str (Number) &
        Res = compute product (Digit) where
                                (
                                m:type.enum_nbr (1, ?:str.length (Num_str), Pos) &
                                Digit_str = :str.sub (Num_str, Pos, 1) &
                                Digit = to_integer (Digit_str)
                                )
;
 
compare_cows (Product, CowsBulls, Cows) :-
        get_number_as_list (Product, Prod_ls) &
        get_number_as_list (CowsBulls, Cows_ls) &
        Cows = compute number where
                                (
                                m:lst.member (Cows_ls, [Digit, Pos1]) &
                                t:lst.member (Prod_ls, [Digit, Pos2]) &
                                Pos1 <> Pos2
                                )
;
 
get_number_as_list (Number, Numb_ls) :-
        Numb_str = to_str (Number) &
        Numb_ls = compute list ([Digit, Pos]) where
                                (
                                m:type.enum_nbr (1, ?:str.length (Numb_str), Pos) &
                                Digit_str = :str.sub (Numb_str, Pos, 1) &
                                Digit = to_integer (Digit_str)
                                )
;
  И задачка в задачката - на какъв език е писано това :yahoo: 
За Result се получава [2159, 17, 127] на изхода.
     Re: Задача междинна (Бикове И Крави)
  Това решение е твърде силово, но пък можем да го използваме за жокер.
Сумата е 144. Което се дели на 9. И има цифра, кратна на 4.
Нещо такова би трябвало да можем да получим, но не ми е ясно как.
Сигурна съм, че задачата е решима и в общия случай.
     Re: Задача междинна (Бикове И Крави)
  Да, браво Edin_Lud - но не знаeм как се решава задачата т.е. защо е единствено решението.
Дали не може да ограничим цифрите. Така малко е на налучкване.
 
Интересно е дали има други 2 числа ( а очевидно и повече) които да отговарят на условията, но да не са прости.
Казвам "браво", защото ми спести търсенето на числата. Не е негативно! Това , че вече ги знаем е напредък, но не пречи да помислим още.
     Re: Задача междинна (Бикове И Крави)
  Че е единствено за четирицифрено търсено число, съм го доказал емпирично. Нямам и най-малка представа как да се реши теоретично задачата. Затова и си позволих да тръгна да пиша код - нещо, което и аз не смятам за коректно. Не съм го направил за браво, а за удоволствие...пък и да размърдам малко раздела
     Re: Задача междинна (Бикове И Крави)
  Yesh, @Edin_Lud прав си като прав маяк.* :033:
 
А оновато? Пролог? Лисп?
 
По въпроса на Wise - наистина е интересно намирането на отговор.
     Re: Задача междинна (Бикове И Крави)
  Да, но дали не е по възможностите на "осемцифрените" само................... :shocked:
Не съм от тях , как Сийке и не ги обичам тея работи, ама едни хора като Bibi, Edin_Lud, InfiniteChaos..............
и други..............................
ма праят да са имам кат говедо сред себеподобни......... :)