Categories
Visual C#

Задача: Drunken Numbers

Описание

Всеки знае, че второто най-важно нещо в живота на програмиста е да пише код, но най-важното е да пие бира. Митко и Владко са много известни програмисти. В 19-тото световно състезание по програмиране двамата се срещнали. Състезанието се състои от N на брой рунда. Във всеки рунд двамата състезатели трябва да пият бира. Митко и Владко са много добри програмисти, затова те пият наистина много бира. Съдиите са пияни и не могат да изчислят колко бира е изпита от всеки състезател, и не могат да определят по-добрият програмист.

Решение

using System;
namespace TelerikExamples {
class DrunkenNumbers {
static void Main() {
// брой рундове - прочита се от конзолата
byte rounds = byte.Parse(Console.ReadLine());
// спечелени точки (една изпита бира = една точка)
int vladkoScore = 0;
int mitkoScore = 0;
for (byte round = 0; round < rounds; round++) {
// "пияно" число - прочита се от конзолата
int drunkenNumber = Math.Abs(int.Parse(Console.ReadLine()));
// брой цифри в числото //
int digitsCount = drunkenNumber.ToString().Length;
int digitsCount = (int) Math.Floor(Math.Log10(drunkenNumber)) + 1;
// начален индекс за Владко
int start = (int) Math.Floor(digitsCount * 0.5);
// отместване от началото на числото
int offset = digitsCount % 2 == 0 ? start : start + 1;
for (int index = 0; index < offset; index++) {
mitkoScore += int.Parse(drunkenNumber.ToString().Substring(index, 1));
vladkoScore += int.Parse(drunkenNumber.ToString().Substring(start + index, 1));
}
}
// разлика в точките
int scoreDifference = Math.Abs(mitkoScore - vladkoScore);
// сбор на точките
int totalScore = mitkoScore + vladkoScore;
// определяне на победителя
if (mitkoScore > vladkoScore) {
// победител е Митко
Console.WriteLine("M {0}", scoreDifference);
} else if (mitkoScore < vladkoScore) {
// победител е Владко
Console.WriteLine("V {0}", scoreDifference);
} else {
// няма победител
Console.WriteLine("No {0}", totalScore);
}
}
}
}