https://goo.gl/EcxUSS
Loading...
+ Нов въпрос
salih1f1 avatar salih1f1 188 Точки

[Exam Problems] C# Basics - Five Special Letters

Здравейте. Още вчера зациклих на тази задача. В задачата се изисква да не се смятат повторно повтарящите се букви а аз не се досещам как да ги изключа от сумата. Останалата част от задачата я разбрах и имам идеи. Ще се радвам ако някой ми помогне. Това е кода, който се състои засега само от 2 масива и 5 вложени цикъла.

0
Programming Basics
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Аз я направих по този начин:

FiveSpecialLetters

На мен листите са ми доста удобни при решаване на 4-тите задачи от изпитите.

1
salih1f1 avatar salih1f1 188 Точки

Много ми помогна с твоя начин. Не се бях сетил. Написах я (случайно или не :) ) почти като твойта. Да но не тръгва. Мъчих се с дебъгера но неможах да разбера къде ми е грешката. Ще съм ти благодарен ако и хвърлиш едно око. http://pastebin.com/hLG1bN0f

0
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

На първо време като гледам lettersList.Clear() си го изнесъл с 1 цикъл по-навън. Сложи го да е в тялото на следващия цикъл. Освен това защо 5-те цикъла са ти в ред edcba, а след това добавяш елементите в ред abcde? Може би и така ще работи, но е по-лесно четимо и логично да са с еднакъв ред. 

И друго открих - на ред 51 letters[a]  а-то си го въвел на кирилица. 

Edit: Явно не работи когато не съвпада реда на буквите в циклите, реда при добавянето в List-a и реда на добавянето им в input. Направи навсякъде поредността да е abcde, плюс оправи другите забележки и ще ти работи.

1
a.angelov avatar a.angelov 1316 Точки

Здравей,

ето моето решение на задачата: http://pastebin.com/UHsUfpX8

Избягвам повторението на буквите по следния начин: ползвам лист в който слагам всяка несъществуваща в него буква. Т.е. листа в началото е празен, обхождам всяка буква от съответната комбинация букви и ако тази буква я няма в листа я добавям в него. По този начин получавам само неповтарящите се букви в листа. Като изчисля тежеста зачиствам листа и при следващата итерация го пълня отново с букви от следващата комбинация. Дано да си ме разбрал, че малко не ме бива в обясненията... :)

1
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Аз слагам всички букви в List и след това използвам Distinct(), който премахва всички повтарящи се елементи.

list = list.Distinct().ToList();  

3
a.angelov avatar a.angelov 1316 Точки

Да, аз разгледах решението ти, доста по-леко става така! Linq определено има доста полезни методи.

2
Valleri avatar Valleri 302 Точки

Съветвам те да ползваш StringBuilder за тази задача, иначе ще зависне, пък и ти трябва променлив Стринг за да е по-гъвкаво решението.

Може напрмер да направиш следното - в ядрото на циклите можеш да append символите към СтрингБилдера, но първо провери с indexOf == -1 дали вече не е там. Ако го няма го добави, след това вече смяташ теглата.

1
Cecobent avatar Cecobent 2 Точки

Според мен най доброто решение до момента е моето, може да помислите над него.
https://pastebin.com/MnjXUnVd
Задавайте въпроси, ако имате нужда!

0
15/04/2017 02:22:27
Samuil_Dechev avatar Samuil_Dechev 35 Точки

Ето и моето решение, предвид, че не съм запознат с листи и речници. Взимам всички комбинации с 5 вложени цикъла, като всяка от тях вкарвам в стринг. От него правя нов стринг, който изключва повтарящите се букви, което не ми беше особено лесно. Оттам смятам сумата и ако отговаря на условието я изписвам.

 

https://goo.gl/EcxUSS

0
17/06/2017 16:29:02