Loading...
krum_43 avatar krum_43 756 Точки

Search_for_a_Number

Задачата е от Exercises: Lists-3 зад.(линк към условието https://judge.softuni.bg/Contests/398/Lists-Exercises).

Написах нещо по въпроса,но кода ми се чупи по необясним за мене начин.

Ще се радвам ако някой ми посочи грешки или сподели негово по-добро решение.

Ето и линк към кода:

https://pastebin.com/2Fx91JLV

 

 

Тагове:
0
Fundamentals Module
nickwork avatar nickwork 657 Точки
Best Answer

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

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

namespace _3._Search_for_a_Number
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> firstString = Console.ReadLine().Split().Select(int.Parse).ToList();
            List<int> secondStringSplit = Console.ReadLine().Split().Select(int.Parse).ToList();

            int numberOfElementstotake = secondStringSplit[0];
            int numberOfElementstodelete = secondStringSplit[1];
            int surchNumber = secondStringSplit[2];

            firstString = firstString.Take(numberOfElementstotake).ToList();
            firstString.RemoveRange(0, numberOfElementstodelete);

            string result = firstString.Any(x => x == surchNumber) ? "YES!" : "NO!";

            Console.WriteLine(result);
        }
    }
}
 

0
krum_43 avatar krum_43 756 Точки

Решението ти е перфекно.

Направо ми върза очите.

Когато го чета всичко ми е ясно,но ми е трудно да пиша по подобен начин.

1
nickwork avatar nickwork 657 Точки

...Реших да ти оправя и решението за да знаеш какво се случва, проблема е remove(), защото той премахва първият елемент, който отговаря на стойността, която си задал, а не премахва по индекс...по условие трябва да премахнеш първите n числа, а с този ремув то търси първото число, което отговаря на условието ( remove(5), ще премахне първата срещната петица, която може да е и на индекс 100,  а не числото на индекс 0...), 

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

namespace _3._Search_for_a_Number
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> firstString = Console.ReadLine().Split().Select(int.Parse).ToList();
            List<int> secondStringSplit = Console.ReadLine().Split().Select(int.Parse).ToList();

            int numberOfElementstotake = secondStringSplit[0];
            int numberOfElementstodelete = secondStringSplit[1];
            int surchNumber = secondStringSplit[2];

            List<int> newList = new List<int>();
            List<int> filteredList = new List<int>();

            bool issurchNumberExist = false;

            for (int i = 0; i < numberOfElementstotake; i++)
            {
                newList.Add(firstString[i]);
            }
            for (int i = numberOfElementstodelete; i < newList.Count; i++)
            {
                filteredList.Add(newList[i]);
            }

            for (int i = 0; i < filteredList.Count; i++)
            {
                if (filteredList[i] == surchNumber)
                {
                    issurchNumberExist = true;
                }
            }

            string result = issurchNumberExist ? "YES!" : "NO!";

            Console.WriteLine(result);
        }
    }
}
 

1
krum_43 avatar krum_43 756 Точки

Разбрах къде е грешката,но това за мен е странна логика.Искаш да кажеш ,че при команда <collection. Remove(5)>колекцията не се претърсва от ляво на дясно,а по произволен начин?!?

0
20/08/2020 13:27:21
nickwork avatar nickwork 657 Точки

Претърсва се от ляво на дясно (от индекс 0 към последният индекс), не знам от къде идва объркването...да ти кажа, че помислих още малко и осъзнах, че и твоят remove трябва да работи...разгледах ти пак решението и :

string secondString= Console.ReadLine();

int [] secondStringSplit = firstString.Split().Select(int.Parse).ToArray(); // забележи, че парсваш firstString, а не secondString, размени ги и всичко е 6

  if(issurchNumberExist=true) => пропуснал си едно равно трябва да е  if(issurchNumberExist == true)

Също за remove може да ти свърши работа метода RemoveAt(), който приема индекс, но не работи с масив, а с лист...

...Измислихме 1001 решения на тази задача :) .. Сори ако съм те объркал нещо 

 

 

0
krum_43 avatar krum_43 756 Точки

Всичко е наред Нещата се изясниха.

Thenk you so muth.

0
p_v_a avatar p_v_a 18 Точки

Не разбрах какъв е точно проблемът, но това е моето решение (Java), Judge дава 100/100.

https://pastebin.com/b04CrKiX

1
chinachin avatar chinachin 1 Точки

I agree with your certain opinions. I will follow and wait for your new post!

word counter

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