Number 0...100 to Text
Някой може ли да ми обясни как да я реша или да напише решение с разяснение ? аз се сещам само за метода да изпиша всички числа с проверките :Д , видях няколко примера на решение но не ги разбрах, нямат обяснения
Някой може ли да ми обясни как да я реша или да напише решение с разяснение ? аз се сещам само за метода да изпиша всички числа с проверките :Д , видях няколко примера на решение но не ги разбрах, нямат обяснения
Използвай зависимости. Имаш няколко числа, които не робуват на зависимости и ако са тези числа задължително трябва да ги провериш дали са те и да им напишеш буквения еквивалент. Това са тези от 1 до 9.
За 10, 11, 12, 13 и 15 важи същото. Трудно може да ги съставиш от N + teen. За останалите до 20 важи правилото N + "teen". Т.е.14 е 4 + teen. Тъй като имаш 4 записано в числата от нула до девет, взимаш го от там (four) и долепяш (teen). Същото важи за 16, 17, 18 и 19.
20 отново е от тези числа, които трябва да ги провериш и да ги изпишеш - "twenty". Но пък 21 е просто комбинация от вече записаните 20 и 1 (twenty one). Подобно и за останалите до 100.
Общо взето логиката е - изключенията, които не може да се съставяш от две или повече части - да ги запишеш. И останалите са просто долепяне от записани до момента числа.
Разбира се за да изкараш да речем от 34 числото 30 и 4 по отделно ще трябва да направиш някаква проста аритметика, като например да намериш остатъци и т.н. :) Оставям те от тук нататък да помислиш.
Успех!
Перфектна задача за да оттренираш Switch конструкцията:
Идеята е, че решението може да бъде разбито на блокове в моя случай на 3 блока:
1/ числа от 0 до 9
2/ цифри от 20 до 90
3/ числа от 10 до 19 (има и отделен случай 100)
Повечето цифри може да получиш като обединяваш блок 2 и блок 1 - примерно twenty five
Ето кода ми:
Остава да напишеш 2 switch блока аналогично на първия. Успех.
Системата е упорита, въпреки че нейният изход и моят съвпадат за вход "-1" ми дава грешка :D
Ето и кода, който използвам :
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
int value;
var num = int.Parse(Console.ReadLine());
string numToString = num.ToString();
if (numToString.Contains("-"))
{
Console.WriteLine("invalid number");
}
var dict = new Dictionary<string, Dictionary<int, string>>();
dict.Add("NumToText", new Dictionary<int, string>()
{
{ -1, ""},
{ 0, "zero"},
{ 1, "one"},
{ 2, "two"},
{ 3, "three"},
{ 4, "four"},
{ 5, "five"},
{ 6, "six"},
{ 7, "seven"},
{ 8, "eight"},
{ 9, "nine"},
{ 10, "ten"},
{ 11, "eleven"},
{ 12, "twelve"},
{ 13, "thirteen"},
{ 14, "fourteen"},
{ 15, "fifteen"},
{ 16, "sixteen"},
{ 17, "seventeen"},
{ 18, "eighteen"},
{ 19, "nineteen"},
{ 20, "twenty"},
{ 30, "thirty"},
{ 40, "fourty"},
{ 50, "fifty"},
{ 60, "sixty"},
{ 70, "seventy"},
{ 80, "eighty"},
{ 90, "ninety"},
{ 100, "one hundred"}
});
if(num <= 20 || num == 0)
{
Console.WriteLine(dict["NumToText"][num]);
}
else if (num > 20 && num < 30)
{
value = num % 10;
Console.WriteLine(dict["NumToText"][20] + " " + dict["NumToText"][value]);
}
else if (num > 30 && num < 40)
{
value = num % 10;
Console.WriteLine(dict["NumToText"][30] + " " + dict["NumToText"][value]);
}
else if (num > 40 && num < 50)
{
value = num % 10;
Console.WriteLine(dict["NumToText"][40] + " " + dict["NumToText"][value]);
}
else if (num > 50 && num < 60)
{
value = num % 10;
Console.WriteLine(dict["NumToText"][50] + " " + dict["NumToText"][value]);
}
else if (num > 60 && num < 70)
{
value = num % 10;
Console.WriteLine(dict["NumToText"][60] + " " + dict["NumToText"][value]);
}
else if (num > 70 && num < 80)
{
value = num % 10;
Console.WriteLine(dict["NumToText"][70] + " " + dict["NumToText"][value]);
}
else if (num > 80 && num < 90)
{
value = num % 10;
Console.WriteLine(dict["NumToText"][80] + " " + dict["NumToText"][value]);
}
else if (num > 90 && num < 100)
{
value = num % 10;
Console.WriteLine(dict["NumToText"][90] + " " + dict["NumToText"][value]);
}else if( num == 90 || num == 80 || num == 70 || num == 60 || num == 50 || num == 40 || num == 30 || num == 20)
{
Console.WriteLine(dict["NumToText"][num]);
}
else if (num == 100)
{
Console.WriteLine(dict["NumToText"][num]);
}else if(num > 100)
{
Console.WriteLine("invalid number");
}else if(!(num > 0))
{
Console.WriteLine("invalid number");
}
}
}
За такъв дълъг код ползвай http://pastebin.com/ Къса те на проверката -1.
Здравей,
Кодът, който си ни написал гърми в Judge не само на -1, а и на всяко число по-малко от нула, както и на всяко двуцифрено число без кръглите 20, 30, 40, и т.н.
С малка редакция минава на 100%. Интересно решение:http://pastebin.com/0TLRD58N
Аз си поиграх да направя задачата само с проверки за да схвана идеята:http://pastebin.com/2LTR7TFr
Поздрави