Проблем с задачата Search for a Number
Здравейте, някой ще ми помогне ли с грешката която съм допуснал на тази задача: https://judge.softuni.bg/Contests/Practice/Index/398#2
Ето го моя код: https://pastebin.com/3rMfK1YW
Здравейте, някой ще ми помогне ли с грешката която съм допуснал на тази задача: https://judge.softuni.bg/Contests/Practice/Index/398#2
Ето го моя код: https://pastebin.com/3rMfK1YW
Привет, грешката ти идва от последния for loop. Четейки кода ти, би трябвало да прекъсва loop-a всеки път на първата проверка, тоест имаш два break; Проверяваш първото число и във всеки случай пишеш на конзолата и излизаш от цикъла.
аз бих използвал Contains:
if (nums.Contains(numThatMustBeInList) == true)
{
Console.WriteLine("YES!");
}
else
{
Console.WriteLine("NO!");
}
Поздрави!
ПП:
numsYouHaveToDeleate => numsYouHaveToDelete = > numsToDelete => elementsToDelete/elementsCountToDelete
Проблема идва от търсенето на числото в масива:
for (int i = 0; i < nums.Count; i++)
{
if (nums[i] == numThatMustBeInList)
{
Console.WriteLine("YES!");
break;
}
else
{
Console.WriteLine("NO!");
break;
}
}
Още при първата итерация, цикъла ще приключи т.к. и в if и в else блок има break; T.e. тази логика винаги ще изписва NO! на екрана освен когато първия елемент не е равен на този, който търсим.
Можеш да избегнеш подобен проблем чрез деклариране на булева променлива извън цикъла(flag), която да сетваш на true ако числото е срещнато. След приключването на цикъла можеш да изпизваш NO или YES в зависимост от стойността на тази променлива. Примерно:
var numberIsPresent = false;
for (int i = 0; i < nums.Count; i++)
{
if (nums[i] == numThatMustBeInList)
{
numberIsPresent = true;
break;
}
}
Console.WriteLine(numberIsPresent ? "YES!" : "NO!");
П.С. Подобна задаче се решава доста по-лесно с LINQ но нямам идея дали сте го учили. Примерно:
var nums = Console.ReadLine().Split().Select(int.Parse).ToList();
var commands = Console.ReadLine().Split().Select(int.Parse).ToList();
var numsYouHaveToTake = commands[0];
var numsYouHaveToDelete = commands[1];
var numThatMustBeInList = commands[2];
var hasNumber = nums
.Take(numsYouHaveToTake)
.Skip(numsYouHaveToDelete)
.Any(x => x == numThatMustBeInList);
Console.WriteLine(hasNumber ? "YES!" : "NO!");
И така написана задачата ти гърми.
Кое гърми? Току що тествах и пак минава с 100/100?