[Programming Fundamentals] 05. Word in Plural
Здравейте! При пускането на задача "05. Word in Plural" - https://judge.softuni.bg/Contests/Compete/Index/579#4 в Judge, ми дава 90/100. Това е моят код https://pastebin.com/TBHNbpYB.
Здравейте! При пускането на задача "05. Word in Plural" - https://judge.softuni.bg/Contests/Compete/Index/579#4 в Judge, ми дава 90/100. Това е моят код https://pastebin.com/TBHNbpYB.
Здравей,
не мисля, че е правилен алгоритъма на заместване, който ползваш. В смисъл - по този начин караш програмата да замести навсякъде в думата, където се среща дадена буква. Пробвай например с "cangaroo" или "xerox" и ще разбереш за какво говоря.
using System;
class WordInPlural
{
static void Main()
{
string word = Console.ReadLine();
char one = word[word.Length - 1];
char two = word[word.Length - 2];
if (one == 'y')
{
word = word.Remove(word.Length - 1);
Console.WriteLine(word + "ies");
}
else if (one == 'o' || one == 's' || one == 'x' || one == 'z' || (one == 'h' && two == 'c' || two == 's'))
{
Console.WriteLine(word + "es");
}
else
{
Console.WriteLine(word + "s");
}
}
}
Ето един вариант :)
Още един вариант
static void Main(string[] args)
{
string word = Console.ReadLine();
string newWord;
bool wordY = word.EndsWith("y"); // проверка дали завършва на "Y"
bool wordZ = word.EndsWith("o") || word.EndsWith("s") || word.EndsWith("x") || word.EndsWith("z") || word.EndsWith("ch") || word.EndsWith("sh");
bool wordZZ = word.EndsWith("ch") || word.EndsWith("sh");
if (wordY == true)
{
newWord = word.Remove(word.Length - 1, 1); // премахва последните n-символa от стринга
Console.WriteLine($"{newWord}ies");
}
else if (wordZ == true)
{
Console.WriteLine($"{word}es");
}
else
{
Console.WriteLine($"{word}s");
}
В момента решавам задачата>Може ли да обясните какво точно е единицата след запетаята в скобите на remove ? newWord = word.Remove(word.Length - 1, 1);
word.Remove(word.Length - 1, 1); тoва казва на стринга отиди на последното място и махни един символ. Тоест ако имаш : simphony като пример дължината на string-a e 8. Но тъй като започваш от 0 да броиш последния символ е на 7мо място и е y. И казваш на string-a отиди на позиция 7 и махни точно 1 символ.в случая може и без него,тъй като махаш последния символ но ако махаш нещо от средата или началото с число на мястото на 1цата в случая може да уточниш дължината на поредицата кояот искаш да махнеш
Махаш го и вместо него добавяш ies. както е по условието на задачата.
https://pastebin.com/LdMBFTQF
Още един вариант.
стринговете всъщност са колекция от чар-ове. (масив по-нататък ще взимаме от този курс, няма да навлизам в обяснение) това, което гледам и други колеги са направили е да си раздробят думата и просто да проверят коя е последната буква, като по този начин става много лесно и с 3 иф-а можеш да си решиш задачата. също - string.Join - доста полезен оператор, който върши бая работа в такива задачки, също така командата за залепяне "+" директно в скобите на Write или WriteLine прави чудеса :)
другото - има доста начини за решаване на една задача, не се притеснявай ако някой друг я е направил по друг начин. обикновено метода, който ти хрумне още докато четеш условието в 90% от случайте излиза успешен, ако не - изтривай всичко и започвай наново е моя съвет :)
Здравей, предлагам ти моето решение. Не съм много сигурна до колко е оптимално, но в judge ми дава 100/100. Дано ти помогне:
https://pastebin.com/znwAbiVH
Ето едно кратко решение което минава 100/100 :)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices.ComTypes;
using System.Text;
using System.Threading.Tasks;
namespace Demo
{
class Program
{
static void Main(string[] args)
{
string word = Console.ReadLine();
bool a = word.EndsWith("o") || word.EndsWith("ch") || word.EndsWith("s") || word.EndsWith("sh")
|| word.EndsWith("x") || word.EndsWith("z");
if (word.EndsWith("y"))
{
word = word.Remove(word.Length - 1);
Console.WriteLine(word + "ies");
}
else if (a)
{
Console.WriteLine(word + "es");
}
else
{
Console.WriteLine(word + "s");
}
}
}
}
Още по-кратко.https://pastebin.com/HiFCZuyt
Колеги, джъджа дава 100/100, но в случая, ако трябва да сме по-точни по този начин не се разглеждат всички възможни случаи. Ето какво имам в предвид:
//Nouns ending in s, z, x, sh, and ch form the plural by adding – es
//Nouns ending in – y preceded by a consonant is formed into a plural by changing – y to – ies.
//Nouns ending in y preceded by a vowel form their plurals by adding – s. (e.g.boy, boys; day, days)
//Most nouns ending in o preceded by a consonant is formed into a plural by adding es
//Some nouns ending in f or fe are made plural by changing f or fe to – ves. (e.g.beef, beeves; wife, wives)
И така например ако напишем "Butterfly" получаваме "Butterflies". Ако обаче пробвате да напишете думата "Array" множественото число го изкарва "Arraies", а правилното е "Arrays". Същото ще бъде и ако пробвате да напишете "Wolf" или "Wife". С този код на Руми се получава "Wolfs" или "Wifes", вместо правилните "Wolves" или "Wives". :)
Ето го и моето решение, само дето и аз не мога да го измисля как да разгледам и двата случая, а именно:
- Ако завършва на Y и предпоследната буква е съгласна
- Ако завършва на Y и предпоследната буква е гласна
https://pastebin.com/QxSD20Zs
Здравей! Това го установих, но не разбрах по какъв друг начин мога да я реша.
тамън се чудих защо правиш толкова много проверки и замествания, като на думите завършващи на o, ch, s, sh, x и z просто трябва да им добавиш es накрая (така както си го направил в последният else)? Защото ненужно премахваш последната/последните букви и после пак ги добавяш.
Кажи как да ги направя. Пробвах няколко начина, не се получи.