Ето едно от решениета ми тук. Дано ти помогне.
Не съм резглеждал подробно решението ти, но е много вероятно да грешиш нещо в случаите за i!=j.
Здравей Симеон,
Ето как го бях мислила аз.:
1.правиш си един масив с всички 10 стойности (10,20,30,50,80...)
2.после правиш един масив от 100 елемента, където ще съхвраняваш всички стойности на последните 2 букви, който пълниш с 2 вложени цикъла, в които обхождаш първия масив и събираш стойностите + 40 (защото номерът винаги започва със СА).
3.Започваш да обхождаш големия масив от стойности, като за всяка стойност въртиш 2 вложени цикъла от 0 до 9, защото реално в магическите номера има само комбинации от a/b (aaaa, aaab, abbb, aabb, ababa, abba). Ако приемем, че итераторите на 2та цикъла са кръстени a и b, то тогава следва да направиш 4 проверки - ако а и b съвпадат и 4*а + стойността от масива с комбинации съвпада с магическото число; ако 3*а +b + стойността съвпада; ако 3*b+а+стойността съвпада и ако 2*а+2*b+стойността съвпада с магическото число. Не забравя, че в случая 2а+2b увеличаваш каунтъра с 3, защото има 3 комбинации.
Успех!
Благодаря за отговорите! За жалост все още не мога да си отговоря на въпроса защо решението на колегата dim4o работи, а моето не, при положение, че са сходни като структура... Ето още един линк към решението ми на задачата Fit Box in Box ( изпит , 1-ва задача) : решение . Мисля, че правя еднотипна грешка и при двете задачи - винаги ми излизат еднаквите стойности (например, при задачата с кутиите ми излизат само решения от типа 4,4,4 < 16,16,16, в момента, в който кажа, че 4 и 16 могат да се срещат само веднъж- и решенията ми стават нула). Може ли някой да даде съвет?
1. Когато разглеждаш sumOfLetters защо правиш условие i!=j ? По принцип буквите в края могат да са еднакви. Това не противоречи на условието
2. sumOfNumbers[i] + sumOfLetters[j] + 30 == magicWeight не дрябва ли да е: sumOfNumbers[i] + sumOfLetters[j] + 40 == magicWeight. Нали CA = 40.
3. int resultOfPairs = (2 * i) + (2 * j); sumOfNumbers.Add(resultOfPairs); --> това не трябва ли да е вътре в условието i!=j ? В такъв случай трябва да се добави към листа 3 пъти.
Имаш една променлива int four = 4 * i;, която не използваш.
Ок, това оправи нещата, благодаря.
За нищо. Понякога дребни на пръв поглед неща могат да ти вгорчат живота. Успех на изпита !
Колеги,
Моята програма http://pastebin.com/KKke11s4 изкарва повече номера от примерите . Още първия пример с тежест 555 се дава изход CA8999XX, CA9998XX, а моята програма изкарва още 2 - CA9899XX, CA9989XX, което ми се струва правилно.
Във втория пример с тежест 512 веднага виждам че липсва номер CA6899TX и CA8699TX. Разгледах и решението на този пуснал теста . Той изследва около 500 комбинации от 4-те числа, а аз всичките 10000 .
Та последно кое е вярното ? Гледам в Judge доста хора са изкарали 100, значи грешката е в мен ,ама къде бъркам .