Loading...
penkov avatar penkov 110 Точки

[Homework] Advanced C# - Arrays, Lists, Stacks, Queues - Решение на задача 4

Здравейте колеги, 

Искам да Ви предложа едно решение на задача 4 от домашното. Според мен е някакво такова сглобено, но с учудване установих, че работи. Ще е добре да разгледам и други решения, защото не мисля че това е най-доброто!

int i;
string[] inputString = Console.ReadLine().Split(' ');
for (i = 0; i < inputString.Length-1; i++)
{
    if (inputString[i] == inputString[i + 1])
    {
        Console.Write("{0} ", inputString[i]);
    }
    else
    {
         Console.WriteLine("{0}", inputString[i]);
    }
}
Console.WriteLine("{0}", inputString[i]);

Поздрави!!!

Тагове:
1
C# Advanced 15/09/2015 18:39:40
penkov avatar penkov 110 Точки

Ми на мен при 1 2 2 1 ми вади 

1

2 2

1

Мисля че е правилно.

0
IceElementor avatar IceElementor 9 Точки

Трябва да е 
1 1
2 2

0
penkov avatar penkov 110 Точки

Хммм да сега се зачетох в условието по внимателно. Благодаря колега.

П.П

Ако бях на изпит, щях да взема максисмум 80 точки от 100

 

0
Bojo96 avatar Bojo96 Trainer 147 Точки

Колега,  препоръчвам ти да инициализираш i в кръглите скоби на цикъла, защото така я енкапсулираш, за да е видима само за цикъла, а не за целия метод. 

1
penkov avatar penkov 110 Точки

Колега 

Моя грешка не съм постнал целия код с отварящия метод и тъй нататък. Ако бях го направил щеше да забележиш, че i променливата е инициализирана непосредствено след отварянето на кръглата скоба.

Извинявам се за което!:)

0
Filkolev avatar Filkolev 4482 Точки

Това, което той е направил, е практиката в JavaScript. В C# да - стандартно променливата за итерация се декларира в цикъла.

1
penkov avatar penkov 110 Точки

Реших да я направя променлива за целия метод, защото последния ред от кода ми е извън цикъла, а ако е вътре ще се принти всеки път (което аз не искам да се случва).

0
15/09/2015 19:29:05
Filkolev avatar Filkolev 4482 Точки

В условната конструкция имаш повторение. Единствената разлика между двата случая е дали накрая ще има спейс или нов ред. При всички положения принтираш числото, така че това може да го изведеш отгоре.

0
penkov avatar penkov 110 Точки

Аха, знаех си, че нещо бъркам.

Благодаря много!!!

0
cap7ainjack avatar cap7ainjack 20 Точки

Здравейте, дали може да покажеш крайния вариант, че позлвате неща които са ми не познати ? :)

1
penkov avatar penkov 110 Точки

Кое точно не си ползвал?

0
borko9696 avatar borko9696 113 Точки

Здравейте колеги,

Ето го и моето решение на тази задача . Ще се радвам ако имате критики или съвети, които да споделите . Всяка помощ е добра дошла и ще се радвам ако мога да доусъвършенстване моето решение :)

Линк към решението: http://pastebin.com/qQqiy1jw

Поздрави ! :)

2
Dargo avatar Dargo 44 Точки

Здравей колега,

Ако въведеш само една дума(променлива) ще получиш exception, защото в случая променливата се явява  първата и последната в масива и като се опиташ да провериш дали е един и същ с предишния получаваш индекс -1.Можеш примерно  да го оправиш с един if(Length==1) да изпринтва и return, но варианти много.

Поздрави! :)

Това е моето решение http://pastebin.com/4GArznrn

1
16/09/2015 02:13:02
stefkay avatar stefkay 54 Точки

Здрасти, решението ти работи с примерите от условието, но ако му подадеш  "hi yes yes hi", ще имаш резултат: 

hi hi

yes yes

a hi hi не е поредица. Същото е като да я решиш с dictionary.

Аз я реших със string, но ми се ще да я преработя с List<List<string>>, където после ще мога да извадя и най-дългата поредица.

Решение със string

Edit: Решение с List<List<string>>

 

0
16/09/2015 15:53:12
nikolaykk avatar nikolaykk 94 Точки

Здравей,

Не бях изчел цялото условие. Но вече съм си я поправил.

Благодаря!

Ето решението: http://pastebin.com/GysNtrQk

2
msmilkoff avatar msmilkoff 338 Точки

Може и по следния начин, ако не искаш i-to да се инициализира извън цикъла:

string[] input = Console.ReadLine()
            .Split()
            .ToArray();

        int count = 0;
        for (int i = 0; i < input.Length - 1; i++)
        {
            if (input[i] == input[i + 1])
            {
                Console.Write(input[i] + " ");
            }
            else
            {
                Console.WriteLine(input[i] + " ");
            }
            count = i;
        }

        Console.WriteLine(input[count +1]);

0
penkov avatar penkov 110 Точки

Интересно решение, но мисля че това което каза Filkolev е още по оптимизирано. Тъй като последния ред дефакто е същия като проверката в if-а може да се направи с or условието в самия if. 


using System;
using System.Linq;


class SequencesOfEqualStrings
{
    static void Main()
    {
        
        string[] inputString = Console.ReadLine().Split(' ');
        for (int i = 0; i < inputString.Length-1; i++)
        {

            if (inputString[i] == inputString[i + 1] || i == inputString.Length )
            {
                Console.Write("{0} ", inputString[i]);
                
            }
            else
            {
                Console.WriteLine("{0}", inputString[i]);
            }
        }
        
    }
}

 

0
Housey avatar Housey Trainer 129 Точки

Не съм сигурен дали е правилно, но аз направо си му набих един Regex и нещата се получиха:

 

using System;
using System.Text.RegularExpressions;

namespace _04.Sentences_Of_Equal_Strings
{
	class EqualStringsMain
	{
		static void Main()
		{
			string[] testStrings =
			{
				"hi yes yes yes bye",
				"SoftUni softUni softuni",
				"1 1 2 2 3 3 4 4 5 5",
				"a b b b b xxx c c c",
				"hi hi hi hi hi",
				"hello"
			};

			Regex getRepeatingRegex = new Regex(@"(((\w+) )\2*\3)|(\w+)");

			foreach (var testString in testStrings)
			{
				foreach (Match item in getRepeatingRegex.Matches(testString))
				{
					Console.WriteLine(item);
				}
				Console.WriteLine();
			}
		}
	}
}

 

0
penkov avatar penkov 110 Точки

Да, но така не нарушаваш ли условието на задачата. Ти задаваш само примерите като възможни поредици, а условието е да въведеш каквото и да е и то да ти изведе редиците. Иначе интересно изглежда. 

П.П

Вчера се занимавах с Regex , но в javascript ;)

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.