[Homework] Advanced C# - Arrays, Lists, Stacks, Queues - Въпрос за задача 5
Здравейте.
Проблема при мен е, че нямам идея как да изпринтя последният елемент от последната нарастваща редица. Като цяло и начина ми се струва малко абсурден, но по добър не можах да измисля. Това е без момента за намирането на най - дългата редица. Също се чудя как при if - a да не изключвам последния елемент, т.е когато вече numbers[i+1]<numbers[i] все пак да отпечатам и numbers[i+1]. Затова съм и изнесъл след else-а един console.write. Ако някой може да ми предложи цялостно решение на задачата за да го разгледам ще му бъда много благодарен
class Program
{
static void Main()
{
int currentidex = 0;
int[] numbers = Console.ReadLine().Trim().Split().Select(int.Parse).ToArray();
for (int i=currentidex; i<numbers.Length-1;i++)
{
if (numbers[i] < numbers[i + 1])
{
Console.Write("{0}", numbers[i]);
}
else
Console.WriteLine(numbers[i]);
currentidex = i + 1;
continue;
}
}
}
}
az izpolzvah nachina ot zadacha 4,koito e mn kratuk i pochti raboti:))-, na output mi reje poslednoto chislo + indexOutOfRange=-outside the bounds??
prekaleno elementarno mi se struva ,ako e po tozi nachin
int [] input = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
for (int i =0;i < input.Length; i++)
{
int currentNumber =input[i];
int nextNumber = input[i + 1];
Console.Write(input[i] + " ");
if (i < input.Length - 1 && currentNumber < nextNumber)
{
Console.Write(" ");
}
else
{
Console.WriteLine();
}
}
Здравей Spaskich,
Много хубаво и опростено решение, малко не му достига за да работи. Аз бях доста позациклил снощи поне 2ч на тази задача преди най-накрая да дойде евриката:
1во трябва да вмъкнеш още един if в първия, в случай че програмата не стигне до else-a -т.е най-дългата поредица е накрая.
2ро не може да се присвояват списъци с "=". Аз първо зачиствам с .clear() и после с .insertrange(0, temp) - 0лата е позицията от която да започне. Ето го целия код:
int[] numbers = Console.ReadLine().Split().Select(int.Parse).ToArray();
List<int> temp = new List<int>();
List<int> longest = new List<int>();
temp.Add(numbers[0]);
Console.Write(numbers[0]+" ");
for (int i = 1; i < numbers.Length; i++)
{
if (numbers[i] > numbers[i - 1])
{
temp.Add(numbers[i]);
Console.Write("{0} ", numbers[i]);
if (i == numbers.Length - 1 && temp.Count > longest.Count)
{
longest.Clear();
longest.InsertRange(0, temp);
}
}
else
{
if (temp.Count > longest.Count)
{
longest.Clear();
longest.InsertRange(0, temp);
}
temp.Clear();
temp.Add(numbers[i]);
Console.WriteLine();
Console.Write("{0} ", numbers[i]);
}
}
Console.WriteLine();
Console.WriteLine("Longest: {0}", string.Join(" ", longest));
Благодаря ти, колега! Оправих проблема по твоя начин, но просто пътувам вече 2 дни и нямах време да постна. Мерси и успех! :)