Професионална програма
Loading...
+ Нов въпрос
Siskoy avatar Siskoy 0 Точки

C# 04. Mixed Up List - More Exercises

C# 04. Mixed up Lists от Lists - More Exercise. Дава ми 50/100. Гърмят Тест 1 и 3. Някакво предложение? Ето го моето решение:

https://pastebin.com/EXbJ39hw?fbclid=IwAR3cpuRJ7E1W1rA16pRUPyjYQq_r2Jay2yDrdVZYU0QYMICvGzhK_sh8Fh0

Тагове:
0
Fundamentals Module
VasilKostov avatar VasilKostov 135 Точки

Привет,

Първо, когато secondNumbers.Count е по-долям, взимаш грешни Constrains, защото - трябва да вземеш числата от масиваите и след това да вземеш 2-те оставащи за constrains. Следователно трябва да вземеш 2-те оставащо от втория List, които са на индекси 0 и 1, запото го обхождаш отзад - напред.

Второ, когато филтрираш числата - не знаеш, коя е долна и коя е горна граница. Следователно трябва да изпозуваш Math.Max - за да немреиш горната и Math.Min - за да намериш долната.

  • Start from the beginning of the first list and from the ending of the second
  • element from the first and element from the second
  • At the end there will always be a list in which there are 2 elements remaining
  • These elements will be the range of the elements you need to print
  • Loop through the result list and take only the elements that fulfill the condition
  • Print the elements ordered in ascending order and separated by a space
4
nchavdarov avatar nchavdarov 1 Точки

Васил Костов, много благодаря за разяснението. Не се бях сетил, че първо трябва да обърнеш по-големия масив и чак тогава да вземеш последните две числа.

1
VasilKostov avatar VasilKostov 135 Точки

За нущо ;)

0
Ljubo6 avatar Ljubo6 21 Точки

Това е моето решение

https://pastebin.com/wvJgnJzc

Първо сравнявам двата входни  листа приравнени към maxList,ако вторият е по голям maxList се обръща,след това  добавям последните два елемента на maxList  в друг лист RULE сортиран във възходящ ред.После пак сравнявам двата входящи листа - от по големия лист премахвам последните два елемента и вторият лист задължително се обръща,миксирам преработените листове вече с еднакви дължини.Отсявам необходимите ми елементи в границите определени от листа RULE чрез Ламбда изрази,сортирам и край.

1
anton_fotev avatar anton_fotev 9 Точки

на същата задача ми дава 50/100.
Пробвах с различни стойности - дава ми верни отговори. Някой може ли да ми помогне, да разбере къде е грешката?

Това ми е кода:

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

public class Program
{
    public static void Main()
    {
        List<int> firstInput = Console.ReadLine()
            .Split(new[]{' ', ','}, StringSplitOptions.RemoveEmptyEntries)
            .Select(int.Parse)
            .ToList();
        
        List<int> secondInput = Console.ReadLine()
            .Split(new[]{' ', ','}, StringSplitOptions.RemoveEmptyEntries)
            .Select(int.Parse)
            .ToList();
        
        List<int> mixed = MakeMixedList(firstInput, secondInput);
        
        int minBorder = CheckRigthListAndMin(firstInput, secondInput);
         int maxBorder = CheckRigthListAndMax(firstInput, secondInput);
        
        List<int> rezult = MakeRezultList(mixed, minBorder, maxBorder);
        
        Console.WriteLine(string.Join(" ", rezult));
        

    }
    
     public static int CheckRigthListAndMin(List<int> firstInput, List<int> secondInput)
      {
        if(firstInput.Count > secondInput.Count)
        {
             return Math.Min(firstInput[firstInput.Count -1], firstInput[firstInput.Count -2]);
        }
        else
        {
            return Math.Min(secondInput[secondInput.Count -1], secondInput[secondInput.Count -2]);
        }
      }
    
     public static int CheckRigthListAndMax(List<int> firstInput, List<int> secondInput)
      {
        if(firstInput.Count > secondInput.Count)
        {
             return Math.Max(firstInput[firstInput.Count -1], firstInput[firstInput.Count -2]);
        }
        else
        {
            return Math.Max(secondInput[secondInput.Count -1], secondInput[secondInput.Count -2]);
        }
      }
    
      public static List<int> MakeMixedList(List<int> firstInput, List<int> secondInput)
      {
          List<int> mixed = new List<int>();
          
          if (firstInput.Count > secondInput.Count)
          {
           secondInput.Reverse();
              
           for (int i = 0; i < secondInput.Count; i++)
           {
            mixed.Add(firstInput[i]);
            mixed.Add(secondInput[i]);    
           }
          } // end if
          else
          {
           firstInput.Reverse();
              
           for (int i = 0; i < firstInput.Count; i++)
           {
            mixed.Add(secondInput[i]);
            mixed.Add(firstInput[i]);        
           }  
          } // end else
          
        return mixed;      
      }
    
    public static List <int> MakeRezultList(List<int> mixed, int minBorder, int maxBorder)
    {
         List<int> rezult = mixed
            .Where(x => (minBorder < x && x < maxBorder))
            .OrderBy(x => x)
            .ToList();
        
        return rezult;
    }
}

0
31/05/2019 15:30:49
Elena123456 avatar Elena123456 199 Точки

Здравейте, ето и едно решение от мен за тези, които в момента карат C# Fundamental и по-следващата седмица ще вземат и листове:  https://pastebin.com/GLPu44LN  

1) Установих, че дължината на микстирания лист ще бъде винаги равна на Мath.Min(firstList.Legth, secondList.Legth)*2, тоест в новия списък ще има по равен брой елементи и от първия и от втория списък, но съобразено с най-малката дължина.

2) Чрез два вложени for цикъла пълним микстирания лист, като int i=i+1 при всяка итерация на вътрешния цикъл. Съответно всеки цикъл ще го брейкна , ако дължината на микстирания лист стане равна на Мath.Min(firstList.Legth, secondList.Legth)*2, тоест на дължината, която е по условие. Ако се пропусне брейкването и в двата цикъла програмата гърми, защото някой от тях достига -1.

3) Чрез две if/else проверки проверявам кой е листа с най-голяма дължина. Ако е първият лист, то ще му взема последните две числа, но ако е втория-първите две числа.

4)Намирам Math.Max() и Math.Min() от двата елемента от т.3.

5) Използвам Where към микстирания лист за да намеря числата, които са по-големи от минималното число и по-малки от максималното число.

6) OrderBy() и принт.

Успех на новозапочналите!

0
01/10/2020 23:41:35
dessy8905 avatar dessy8905 4 Точки

Ето едно решение и от мен

https://pastebin.com/DkwjDFfS

0
doncho9292 avatar doncho9292 0 Точки

Ето едно кратко и четимо 100/100 решение от мене, разковничето е да се следват точно стъпките без да създаваме наши си имагенарни,докато решаваме задачата - https://pastebin.com/3FmkEq7M

0