Loading...
wolfylambova avatar wolfylambova 4 Точки

[Exam Problems] C# Basics 10 April2014 Evening - Problem {4} - Hayvan Numbers

Здравейте :)
Може ли някой да ми погоне със задача.4 Hayvan Numbers.
''Hayvan numbers are 9-digit numbers in format abcdefghi, such that their sub-numbers abc, def and ghi have a difference diff (ghi-def = def-abc = diff), their sum of digits is sum and abc < def < ghi, where each digit a, b, c, d, e, f, g, h and i is in range [5…9].
Your task is to write a program to print all Hayvan num.''
Целта на алгоритъма ми е:
1)Намирам всички числа(като спазвам интервала), за които е изпълнено sum==(a+b+c+d+e+f+g+h+i).
   Пазя ги в List<string>, за да използвам Substring(по тройки) в следващата стъпка.
2)Намирам всички числа(в листа), за които е изпълнено ghi-def = def-abc = diff

Проблем обаче прави при пълненето на листа ми в първия етап.
Може би не задавам правилностойностите или не parse-вам към int правилно.
Много ще съм благодарна, ако някой погледне решението ми.

Ето линк:

https://github.com/wolfylambova/ExamCSharp-10AprilEvening/blob/master/04.%20Hayvan%20Numbers.cs

 

Тагове:
0
Programming Basics 06/11/2014 17:04:55
Petya:
Има отворени теми за тази задача: https://softuni.bg/forum/questions/details/1601 и https://softuni.bg/forum/questions/details/1156. Използвайте търсачката преди да поствате нови въпроси!
Kamigawa avatar Kamigawa 750 Точки

Вместо да ги добавяш към лист(и след това да върви по листа и да принтира) - може да ги принтираш, т.е. като намери число, което отговаря на изискванията. Само, че с тези 9 лоопа мисля, че няма да се вмести в изискванията за времето (и аз се бях опитал да я реша така). Варианта(поне както го реших после) е с 3 лоопа, за всяко от подчислата, и провеки дали са валидни.

едит: забравих да спомена, че тази задача е от 10 април, не 11 :)

0
06/11/2014 16:06:33
wolfylambova avatar wolfylambova 4 Точки

Добре, ще опитам по този начин и ще си ги проверявам с 3 цикъла.
Въпросът ми обаче още стои, защо не ми ги пълни в листа.
Ако се абстрахираме даже от задачата, важно ми е да разбера дали този метод на конвертиране от стринг към инт работи  ( ако работи каква е грешката ми тук), защото и за други задачи ми е нужен.
Благодаря ти, оправих датата.

0
Kamigawa avatar Kamigawa 750 Точки

Сега минах по кода, извинявай, че не го направаих преди. Ето проблемът -  88 ред - if (isEmpty) трябва да бъде !isEmpty и вади верните отговори. Макар, че пък не влиза в No така, при 93, 10 вход. Нещо има с тази проверка. Преминаването през листовете, парсване и т.н. са коректни. Интересни ми е дали ще мине и през джъждва за време - доста сложни операции са :)

едит - ето какво промених по проверката за No, за да работи коректно:

69 ред - bool isEmpty = true;

82 ред добавяне на нов ред -  isEmpty = false;

88/89 ред проверката остава - if (isEmpty)

90/91 ред трябва да бъде само No, без точката.

Така трябва да работи вече нормално.

1
06/11/2014 16:48:52
wolfylambova avatar wolfylambova 4 Точки

Благодаря, оправих условието.
Амии, даде ми даже в повече отколкото очаквах,хаха.  50/100

С това решение
Памет: 27.31 MB 
Време: 0.249 s
(от позволена 16МВ)


0
Filkolev avatar Filkolev 4482 Точки

Трябва да смениш изцяло подхода, т.е. да започнеш от друга изходна позиция.

Започни от това условие: ghi-def = def-abc = diff, то е най-ограничаващото. Търсиш три трицифрени чила, които помежду си имат разлика diff, след което проверяваш дали общата сума на цифрите е каквото искаш да бъде и дали всички цифри са позволени.

В противен случай обхождаш супер много варианти, то е все едно да пуснеш цикъл от 555 555 555 до 999 999 999. Това са половин милиард завъртания (в твоя алгоритъм са по-малко, но все пак прекалено много въпреки оптимизацията); гарантирано ще прехвърлиш времето. 

btw, какъв точно е проблемът с пълненето на списъка? Изглежда ОК в горната част, така че вероятно някъде долу в методите не се получават нещата.

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.