Грешки в Кода Severland Number


0

Здравейте.Изпробвах в bgcoder-a за задачата severland number и печеля 50 точки от 100. Моля дайте идеи какви са ми грешките за да не ги допускам утре на изпита. Мерси

Това е кода ми: http://pastebin.com/6cLZj1BB

Когато си проверя full reporta ми дава следните грешки : Answer: 7,8,9,11,12,13,16,18,19,20.  Дали са синтактични защото нямам коментари или не харесва многото if условия .... ??

Ето линк към условието на задачата : http://bgcoder.com/Contest/Practice/80

 




Отговори



0

Пусни линк към условието на задачата от bgcoder за да можем да погледнем условието на задачата.


от nencho83 (538 точки)


0
На най-пръв поглед махни всякакви user-friendly съобщения от рода please enter:, the number is out of range! и т.н. Кода не го проверява човек и тези съобщения се приемат за грешка, а не това че нямаш коментари...

от stefanN (952 точки)


0
е нали има изисквания в условието, а пък да не ги проверявам в програмата .....??

от geripetkova (104 точки)

0
Изискванията трябва да ги съобразиш ти за себе си, а не да ги даваш като output Това също трябва да отпадне foreach (var specialChar in specialChars.Where(kToString.Contains)) { Console.Write("The number must not contain {0}", specialChar); Console.WriteLine(""); } Като output трябва да изкараш само и единствено това,което ти искат - затова са дадени примерите най-долу. естествено,че за да работи правилно решението,трябва да правиш провелки в програмата по дадените изисквания...То даже е написано,чети хубаво условията: The output should consist of a single line holding the number K+1 (in 7-based numeral system).

от stefanN (952 точки)


0
Не се бях сетил за такова решение.
Накрая правиш проверка и ако числото е 666, печаташ че няма такова число, а то има. Последното число на дадената в условието седмична бройна система е 1000. Тоест 666 + 1 = 1000. Другото което е, че не трябва да принтираш излишен текст по конзолата, нито пък да правиш проверки за валидността на въведеното число. Предполагам има и други грешки, но пробвай и кажи как е, а аз ще поразгледам още.
EDIT: Да уточня: премахни всякакъв CW. Накрая трябва да принтираш само следващото число от 7-ната бройна система.
EDIT 2: За да стане с if-ове трябва да напишеш много код. Затова ти предлагам едно друго решение:
1. След като си прочетеш числото (то първо е в 7-на бройна система) го преобразуваш в десетична бройна система. 2. Добавяш едно към полученото число. 3. Това число го преобразуваш от десетична в седмична бройна система пак и това ти е отговора ;).
Преобразуването става аналогично на преобразуването от 10 -> 2 и 2 -> 10 бройни системи.

от tisho (1966 точки)


0
BGCoder не го интересува качество на кода, коментари и дали имената на променливите са написани разбираемо - компилира програмата, подава входни данни, записва какъв резултат връща твоята програма и го сравнява с предварително изчислен верен отговор. Както казват колегите щом пише К=[0...666], няма да ти подаде на входа К=1000. Целта е да разпечаташ само резултат във формата в който са го дали в примерите след условието, нищо допълнително.

от Hades12 (284 точки)


0

Кода остана само това http://pastebin.com/VTX2WqA0, и пак съм с 50 точки и същият report


от geripetkova (104 точки)


0
Пропускаш варианта k = 146 и т.н. Ако искаш да стане така с if-ове ще трябва доста да понапишеш. Погледни какво ти написах преди малко по-нагоре.

от tisho (1966 точки)

0
Този вариант на писане ти препоръчвам да го избягваш. Винаги ще бъркаш, плюс това веднъж объркаш ли, няма оправяне и заради една такава задача, ще си прецакаш целия изпит.
Относно задачата, ето идеята, с която съм подходил за решаването на задачата: Примерно имаш някакво си число подадено на входа (по-долу ще посоча примери), прочети го като стринг сложи го в един StringBuilder за да можеш да го променяш. Сега идва интересната част - започни да четеш отзад напред. Да кажем, че имаме числото 666 променяш всяка цифра която е равна на 6 на 0 в този случай ще получиш 000 в StringBuilder-a. За случаите, когато имаш само 6-тици (6 --> 10, 66 --> 100, 666 --> 1000, 6666 --> 10000, ...), накрая добавяш една 1-ца в началото на стринга. Трябва да добавиш някаква проверка, дали си срещнала цифра различна от 6-ца. При първата срещната цифра различна от 6-ца, увеличаваш цифрата с 1 и принтираш на конзолата, без да добавяш нищо (200 --> 201, 234 --> 235, 461 --> 462, 6135 --> 6136, ...). Ключовото е четене на числото отзад напред. Мога да ти споделя кода, но предпочитам да разбереш, какво точно трябва да се случи и да си го напишеш сама. Успех!

от nencho83 (538 точки)


0

Един от начините да се реши тази задача е числото да се конвертира от 7-на в 10-на система, да се прибави към десетичното число 1 и после да се конвертира обратно в 7-на система. Ето моето решение: http://pastebin.com/83Ys1jbK Не съм си играл да оправям кода за по-добра четимост. 


от Hades12 (284 точки)


0

Здравей Гери,

На пръв поглед мога да кажа следното:

1. На ред 13 правиш следната проверка >=500 && k < 5666

Махни последната 6ца. (+5 точки в бг кодер)

2. Има още много случаи, които не са разгледани, затова са и грешните резултати в bgcoder. Например 116, 126, 136 и т.н.

 

Аз (edit: явно не съм единствен, както колегата Ангелов посочи) бих подходил към задачата по следния начин:

Преобразувам числото в десетична бройна система. Прибавям 1.

Преобразувам числото в седмична бройна система.

Ако те затруднява някоя от стъпките, кажи.


от simonkazakov (1116 точки)


0
Вече съм дал това предложение за бройните системи мааалко по-нагоре ;).

от tisho (1966 точки)

0
Бавно пиша ;)

от simonkazakov (1116 точки)


0

Здравейте, 

хайде след като има такава тема отворена и аз да питам нещичко. 

Ето следния код http://pastebin.com/Fw1JtMMY

за решение на същата задача, обикновено изкарва верен резултат за повечето тестове(не съм тествала всички), но пък ги печата в обратен ред. Пример: Ако трябва да изпечата 200 то печата 002 . как да се поправи грешката?




0
Пускаш един цикъл от последния елемент на стринга и печаташ елемент по елемент. При всяка итерация намаляваш индекса (j) с 1 :).
for (int j = result.Length - 1; j >= 0; j--) { Console.Write(result[j]); }

от tisho (1966 точки)

0
Или може да пробваш с Array.Reverse. Ето тук е обяснено. http://www.dotnetperls.com/reverse-string

от lostm1nd (846 точки)