05. Messages- Judge 100/100 въпреки неточности в output
Имам запитване отностно задачата "05. Messages" от Basic Syntax, Conditional Statements and Loops - More Exercise. Judge ми дава 100/100 при положение, че аутпута не ми е съвсем коректен. Винаги в началото ми се изпечатва празно пространство на думата. Опитвам се да го изтрия , но не успявам. Отново ли ще трябва да се използва StringBuilder() или има и друг вариант?
Имам и въпрос за лупването, което се опитах да добавя за да наподобява програмата повече на писането на sms на стар телефон. Имам предвид, че ако юзъра натисне пет пъти 2 да му изписва отново "b". Открих и проблем с въпросното лупване, което не работи както очаквам: при инпут=2 аутпут="а", при инпут=22 аутпута="b", при инпут=222 аутпута="c", но при инпут=2222 инпута вместо да е "а", както се и очаква, е "b".
Така ли работи лупването по принцип, защото едва на второто превъртане този проблем се оправя, тоест инпут=22222 аутпут става="с" и при инпут=222222 аутпут=а?
Условието на задачата
- 05. Messages
- https://softuni.bg/trainings/resources/officedocument/49564/basic-syntax-conditional-statements-and-loops-more-exercise-csharp-fundamentals-may-2020/2830
https://judge.softuni.bg/Contests/Practice/Index/1453#4
Решение:
Създавам char[] inputCountArr за да преброявам колко пъти юзъра е въвел едно число. Съответно според дължината на този масив програмата разбира дали инпута е примерно "2" или "2222". Ако char[] inputCountArr.Length==1, то от съответния char[] content ще вземем първия символ, ако char[] inputCountArr.Length==2, то от съответния char[] content ще вземем втория символ и т.н.
using System;
namespace messages
{
class MainClass
{
public static void Main(string[] args)
{
int numberOfLines = int.Parse(Console.ReadLine());
string sumCurrentChar = " ";
for (int i = 1; i <= numberOfLines; i++)
{
string input = Console.ReadLine();
char[] inputCountArr = new char[input.Length];
char currentChar = '0';
if (input.Contains("2"))
{
char[] content = new char[] { 'a', 'b', 'c' };
currentChar = CalculateCurrentChar(inputCountArr, currentChar, content);
}
else if (input.Contains("3"))
{
char[] content = new char[] { 'D', 'e', 'f' };
currentChar = CalculateCurrentChar(inputCountArr, currentChar, content);
}
else if (input.Contains("4"))
{
char[] content = new char[] { 'g', 'h', 'i' };
currentChar = CalculateCurrentChar(inputCountArr, currentChar, content);
}
else if (input.Contains("5"))
{
char[] content = new char[] { 'j', 'k', 'l' };
currentChar = CalculateCurrentChar(inputCountArr, currentChar, content);
}
else if (input.Contains("6"))
{
char[] content = new char[] { 'M', 'n', 'o' };
currentChar = CalculateCurrentChar(inputCountArr, currentChar, content);
}
else if (input.Contains("7"))
{
char[] content = new char[] { 'p', 'q', 'r', 's' };
currentChar = CalculateCurrentChar(inputCountArr, currentChar, content);
}
else if (input.Contains("8"))
{
char[] content = new char[] { 't', 'u', 'v' };
currentChar = CalculateCurrentChar(inputCountArr, currentChar, content);
}
else if (input.Contains("9"))
{
char[] content = new char[] { 'W', 'x', 'y', 'z' };
currentChar = CalculateCurrentChar(inputCountArr, currentChar, content);
}
else if (input.Contains("0"))
{
currentChar = ' ';
}
sumCurrentChar = sumCurrentChar+currentChar;
}
Console.WriteLine(sumCurrentChar.ToLower());
}
private static char CalculateCurrentChar(char[] inputCountArr, char currentChar, char[] content)
{
if (inputCountArr.Length == 1)
{
currentChar = content[0];
}
else if (inputCountArr.Length == 2)
{
currentChar = content[1];
}
else if (inputCountArr.Length == 3)
{
currentChar = content[2];
}
else if (inputCountArr.Length == 4 && content.Length==4)
{
currentChar = content[3];
}
else if (inputCountArr.Length >= content.Length)
{
currentChar = content[inputCountArr.Length % content.Length];
}
return currentChar;
}
}
}
Решението е добро за знанията, които имате до момента. Със StringBuilder ще е по-добре, разбира се.
Проверката за "0" няма как да бъде избегната, защото това е специален случай на валидни входни данни.
Най-добре отваряйте нова тема, вместо да преизползвате стара такава, особено когато въпросът се различава от този, в текущата.
Благодаря! Ще го имам впредвид :). Приятна вечер!
Здравей, може ли малко по - подброно разяснение на логиката и кода.
Благодаря