Най-задълбочената програма по софтуерно инженерство в България
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
3
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 235 Точки

Здравейте, ето и едно решение от мен за тези, които в момента карат 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 2 Точки

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

0
ivanpop avatar ivanpop 1 Точки

Писали сте по 60-80 реда код за такава елементарна задача?

https://pastebin.com/Jc4diDXA

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