Задача 4. Хистограма от междиния изпит
Задачата е " 4. Хистограма " от междиния изпит. Това ми е до тук решението http://pastebin.com/ZUZDmf5y
в правилна ли посока съм. Незнам точно как да направа брояча на числа.
Задачата е " 4. Хистограма " от междиния изпит. Това ми е до тук решението http://pastebin.com/ZUZDmf5y
в правилна ли посока съм. Незнам точно как да направа брояча на числа.
Очакваните резултати за процентите (p1 до p5) трябва да са във формат double, с int няма да се получи. Ако се изпълнят условията на проверките, променливите p1, p2.. p5 трябва да се увеличат с 1, т.е. да ги преправиш на p1++, p2++,.. p5++. Общият брояч counter можеш да го изнесеш веднага след прочитането на числото от конзолата, за да не го повтаряш при всяка проверка.
Ето моето решение (имената на променливите са различни) https://gist.github.com/astambi/9eafc366179965b14c47
Просто елиминираш counter и след това от всяко условие премахваш реда (p1 = counter / 20 * 100;):
if (conditionN)
{
p1 = counter / 20 * 100;
counter++;
}
като го коригираш така:
if (conditionN)
{
p1++;
}
Като редовете ги изкарваш извън FOR-цикъла, като коригираш всичките тези редове така:
p1 = p1 / n * 100;
p2 = p2 / n * 100;
.....
p5 = p5 / n * 100;
В случая както ти си го направил, counter ще минава през всеки IF, чието условие се изпълни, т.е. то ще се увеличи n-пъти и резултата ще ти бъде все 100% при правилна формула и понеже делиш винаги на 20 - това означава че каквото и n да въведеш, ти винаги смяташ, че имаш въведени единствено и само 20 числа. Независимо колко цели числа ще въведеш, дали 5 или 105 числа, форрмулата ти смята само за 20 числа:
p1 = counter / 20 * 100;
p2 = counter / 20 * 100;
.....
p5 = counter / 20 * 100;
Ето и моето решение: http://pastebin.com/DqNFY2Fk
Не бях разбрал условието, затова и сгреших. Трябва по повече време да се отделя на условието на задачите и да се измисли най-добрия начин за решение, а може и чертеж за някои задачи. След като колежката ми бутна едно рамо я реших ето така
http://pastebin.com/1Xxtxuq2
Благодаря ти за помощта. Видях къде са ми пропуските и я реших.
Колега и аз по-подобен начин съм решил тази задачи, само ако позволиш, да вметна, че можеш да елиминираш ++count;, понеже накрая то ти се дублира с n
Може накрая само да коригираш редовете от count1 до count5
вместо: Console.WriteLine("{0:0.00}%", 100 * count1 / count);
така: Console.WriteLine("{0:0.00}%", 100 * count1 / n);
И в двата случая е вярно, просто една идея по-бързо може би за по-сложни задачи.
Напълно вярно! Едва вчера и аз забелязах, че има излишно броене. Това ми е решението от междинния изпит. Явно бързането е било повечко и оптимизацията по-малко :)