Loading...
retterathtom avatar retterathtom 5 Точки

Append Arrays

Привет

 

Задачата не ми е ясна. Като напиша конзолата да чете с "|", ми гърми и не се сещам как да обърна отзад/напред и отляво/надясно. Моля за помощ и ако може примерно решение.

7.Append Arrays

Write a program to append several array of numbers.

  • arrays are separated by ‘|’.
  • Values are separated by spaces (‘ ’, one or several)
  • Order the arrays from the last to the first, and their values from left to right.

Благодаря предварително! smiley

Тагове:
2
Fundamentals Module
VasilKostov avatar VasilKostov 135 Точки
Best Answer

Привет,

Първо трябва да прочетеш инпута и да гo Split-неш по ('|'), след което за да стане последния първи (Order the arrays from the last to the first) - просто го Reverse-ваш, може и още при четенето и ще се получи нещо такова:

List<string> numbersAsStrings = Console.ReadLine()
                                .Split('|')
                                .Reverse()
                                .ToList();

След това (вече са подредени отзад-напред), трябва да сплитнеш всеки стринг, по отделно и да ги добавиш в един List<int> или да събереш Lista-a от string-ове в 1 стринг и него да Split-неш, по един или повече спейсове и да го налееш в един List<int>.

Аз съм го направеил по първият начин и изглежда така:

foreach (var str in numbersAsStrings)
{
    numbers.AddRange(str.Split(" ", StringSplitOptions.RemoveEmptyEntries)
                        .Select(int.Parse)
                        .ToList()
                         );
}

Забележи, че Split-вам променливата "Str", която е индивидуален string от List-а със string-ове!

И по този начин числата си се редят отляво - надясно.

3
29/10/2018 14:47:04
retterathtom avatar retterathtom 5 Точки

Много добре описано! При примерите дадени са дали лист от 1 2 3 | 5 6 7 | 8 9 10. 5 6 и 7 няма да бъдат местени и резултата ще бъде 8 9 10 | 5 6 7 | 1 2 3. Как да напиша кода по начин където 5 6 и 7 няма да мръднат? 

1
VasilKostov avatar VasilKostov 135 Точки

Както написах, в предишния коментар:

List<string> numbersAsStrings = Console.ReadLine()
                                            .Split('|')
                                            .Reverse()
                                            .ToList();

По този начин сменяш само местата на стринговете, от инпута - разделени по '|', но не разменяш местата на числата в тях, следователно 1 2 3 | 5 6 7 | 8 9 10  ще сатане  List<string> 8 9 10  5 6 7  1 2 3, като всеки цвят е отделен стринг в този List, като всяко число остава на мястото си.

0
retterathtom avatar retterathtom 5 Точки

Благодаря ти. Проверих защо ми гърмеше и видя къде е грешката. Ето го правилното: numbers.AddRange(str.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries)
                                    .Select(int.Parse)
                                    .ToList()
                                     );

Мерси, че ми помогна!

1
Kotomanov avatar Kotomanov 9 Точки

Здравейте

 

Споделям едно решение от мен , в случай, че някой от текущия Тех Модул  има нужда да погледне :

 

List<string> numbers = Console.ReadLine().Split('|', StringSplitOptions.RemoveEmptyEntries).Reverse().ToList();

   
   for (int i = 0; i < numbers.Count; i++)
   {
    List<string> work = numbers[i].Split(" ", StringSplitOptions.RemoveEmptyEntries).ToList();

    
    for (int j = 0; j < work.Count; j++)
    {

     Console.Write($"{work[j]} ");


    }

   }

 

1
Zstefanov avatar Zstefanov 0 Точки

Благодарим!

0
Elena123456 avatar Elena123456 235 Точки

Ето и едно решение с обратен цикъл без използването на Reverse(), което  впрочем печата числата в правилния ред, но Judge дава 0/100, защото не ми работи:

StringSplitOptions.RemoveEmptyEntries

Някой би ли могъл да ми помогне за настройките, тъй като съм с Monodevelop(7.8.4(build 2)) на Ubunto.

Предварително благодаря!

 

using System;
using System.Linq;
using System.Collections.Generic;

namespace ListExc
{
    class MainClass
    {
        public static void Main()
        {


            List<string> listOfArrays = Console.ReadLine().Split('|').ToList();
       

            for(int i=listOfArrays.Count-1; i >= 0; i--)
            {
               string[] arrays = listOfArrays[i].Split().ToArray();

                for (int k = 0; k <= arrays.Length-1; k++)
                {
                    Console.Write($"{arrays[k]} ");
                }

            }

 

        }

    }

}

 

 

 

 

 

0
Elena123456 avatar Elena123456 235 Точки

Най-накрая открих как при мен (Monodevelop(7.8.4(build 2) на Ubunto) заработва StringSplitOptions.RemoveEmptyEntries: ето така ".Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);"

И вече Judge дава 100/100 и при мен.

using System;
using System.Collections.Generic;
using System.Linq;
namespace listExer
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            List<string> listOfLists = Console.ReadLine().Split('|').ToList();
            List<string> result = new List<string>();

            for (int i = listOfLists.Count - 1; i >= 0; i--)
            {
                var currentList = listOfLists[i].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                foreach (var item in currentList)
                {
                    result.Add(item);
                }

            }

            Console.WriteLine(string.Join(" ",result));
        }
    }
}


 

0
21/09/2020 16:33:58
Ogikostadinov123 avatar Ogikostadinov123 1 Точки

Едно решение  без цикли на 4 реда за 100% в Judge wink.

using System;
using System.Linq;
namespace ConsoleApp14
{
    class Program
    {
        static void Main(string[] args)
        {
string[] input = Console.ReadLine().Split('|').Reverse().ToArray();
string temporal = string.Join(" ", input);
string[] rezult = temporal.Split(" ", StringSplitOptions.RemoveEmptyEntries).ToArray();
Console.WriteLine(string.Join(" ", rezult));
        }
    }
}

0
01/11/2020 05:19:28
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

дали е без цикли или просто са скрити отдолу под методите които ползваш?  хубаво е да знаеш какво се случва отдолу.

0
johanni avatar johanni 5 Точки

Ето едно мое с for  цикъл

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> items = Console.ReadLine()
                 .Split("|")              
                 .ToList();

            items.Reverse();

            List<string> result = new List<string>();

            for (int i = 0; i < items.Count; i++)
            {
                List<string> numbers = items[i].Split(' ', StringSplitOptions.RemoveEmptyEntries).ToList();

                for (int j = 0; j < numbers.Count; j++)
                {
                    result.Add(numbers[j]);
                }
            }

            Console.WriteLine(string.Join(" ", result));            
        }
    }
}
 

 

0
salim avatar salim 0 Точки

static void Main(string[] args)
        {
            List<string> arrays = Console.ReadLine().Split("|").Reverse().ToList();
            List<int> numbers = new List<int>();

            foreach(var str in arrays)
            {
                numbers.AddRange(str.Split(" ", StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList());
            }

            Console.WriteLine(string.Join(" ", numbers));
        }

0
estefanov avatar estefanov 4 Точки

Ето моето предложение, 100/100 в Judge:

List<string> inputData = Console.ReadLine().Split('|').Reverse().ToList();

List<int> numbers = new List<int>();
foreach (var str in inputData)
{
    numbers.AddRange(str.Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList());
}

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