Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2014, 19:10   #1
Alexey Smirnov
Пользователь
 
Регистрация: 16.11.2013
Сообщений: 33
По умолчанию Метод, который возвращает второй по величине за минимальным элементом или null

Здравствуйте. Помогите пожалуйста написать метод, который требуется в шапке темы. Входные данные - последовательность чисел. Метод необходимо дополнить к коду:

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ListLibrary
{
 
     class Program
    {
        static void Main(string[] args)
        {
            
            int[] array1;
            ListLib<int> listInts = new ListLib<int>();
            Console.WriteLine("Количество чисел в последовательности: ");
            int n = int.Parse(Console.ReadLine());
            Console.WriteLine("Введите числа");
            array1 = new int[n];
 
            for (int i = 0; i < n; i++)
            {
                array1[i] = int.Parse(Console.ReadLine());
                listInts.Add(i);
            }            
            int[] ccol = new int[0];
            listInts.AddRange(ccol);
            foreach (int key in array1)
            {
                Console.WriteLine(key);
            }
            Console.ReadKey(); 
        }
    }
    public class Node<T>
    {
        public T value { set; get; }
        public Node<T> nextNode { set; get; }
        public Node( T Value)
        {
            this.value = Value;
            this.nextNode = null;    
        }
    }
 
    public class ListLib<T> : IEnumerable <T>
    {
        public int Count { private set; get; }
        Node<T> _head;
        Node<T> _lastNode;
 
        public ListLib()
        {
            Count = 0;
            _head = null;
            _lastNode = null;
        }
        public ListLib (IEnumerable<T> list)
        {
            if (list == null || !list.Any())
            {
                Count = 0;
                return;
            }
            CreateFirstNode ( new Node<T>(list.ElementAt(0)));
            
            foreach (var value in list.Skip(1))
            {
                Add(value);
            }
        }
        public void Add( T value)
        {
            Node<T> newListNode = new Node<T>(value);
            if (_lastNode != null)
            {
                _lastNode.nextNode = newListNode;
                _lastNode = newListNode;
                Count++;
            }
            else
            {
                CreateFirstNode(newListNode);
            }
        }
 
        private void CreateFirstNode(Node<T> newListNode)
        {
            _head = newListNode;
            _lastNode = _head;
            Count = 1;
        }
 
        public void AddRange(IEnumerable<T> list)
        {
            if (list == null || !list.Any())
            {
                return;
            }
            foreach (var value in list)
            {
                Add(value);
            }
         }
 
      
 
        #region IEnumerable<T> Members
 
        IEnumerator<T> IEnumerable<T>.GetEnumerator()
        {
            for (Node<T> listNode = _head; listNode != null; listNode = listNode.nextNode)
            {
                yield return listNode.value ;
            }
        }
 
        #endregion
 
        #region IEnumerable Members
 
        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            for (Node<T> listNode = _head; listNode != null; listNode = listNode.nextNode)
            {
                yield return listNode.value;
            }
        }
 
        #endregion
    }
}
Alexey Smirnov вне форума Ответить с цитированием
Старый 29.10.2014, 20:56   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я не оч. понял что тебе нужно, но я предлагаю решать так:
Код:
using System;
using System.Linq;
namespace Application
{
	class MainClass
	{
		public static void Main (string[] args)
		{
			int[] a={1,3,2,9,5};
			int b = a.OrderBy (v => v).ToArray () [1];
			Console.WriteLine ("{0}",b);
			Console.ReadKey ();
		}
	}
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.10.2014, 23:11   #3
Alexey Smirnov
Пользователь
 
Регистрация: 16.11.2013
Сообщений: 33
По умолчанию

Stilet

Например, в том случае, когда: все элементы одинаковые (1 1 1 1 1 1 1), когда элемент в последовательности один, то возвращаем null. В остальных случаях должно возвращаться значение из входной последовательности. Например, 1 2 3 возвращаем 2. Обязательно должен быть return.
Alexey Smirnov вне форума Ответить с цитированием
Старый 30.10.2014, 07:39   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А это можно доправить конструкцией distinct()

Код:
using System;
using System.Linq;
namespace Application
{
	class MainClass
	{
		public static void Main (string[] args)
		{
			int[] a={1,1,1};

			int[] b = a.OrderBy (v => v).Distinct().ToArray ();
			if(b.GetLength(0)<2) Console.WriteLine ("null"); else
			Console.WriteLine ("{0}",b[1]);
			Console.ReadKey ();
			Console.WriteLine ("Hello World!");
		}
	}
}
А мона вопрос?: А чо код в топе то делает? Чет он какой-то большой...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.11.2014, 18:08   #5
Alexey Smirnov
Пользователь
 
Регистрация: 16.11.2013
Сообщений: 33
По умолчанию

Stilet
По сути ничего особенного. Выводит на экран ту последовательность чисел, которую сам же и задашь. Но почему именно такой код, а не ГОРАЗДО проще? Потому что такой выдали и именно его надо доработать методом, в чем помощи я и прошу.
Alexey Smirnov вне форума Ответить с цитированием
Старый 01.11.2014, 18:42   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Потому что такой выдали и именно его надо доработать методом, в чем помощи я и прошу.

...сказать нечего.
Я... Я пас...
Извини, я не специалист по недопрограммам из генофонда минобразования.
Соболезную.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.11.2014, 22:03   #7
Alexey Smirnov
Пользователь
 
Регистрация: 16.11.2013
Сообщений: 33
По умолчанию

Stilet

Да ничего. Спасибо за отклик!
Alexey Smirnov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
второй по величине элемент вектора fbsd Помощь студентам 1 16.02.2012 16:35
Второй по величине элемент в массиве.Prologue. Nicko_mt Помощь студентам 0 07.10.2011 23:35
Найти второй по величине элемент (assembler) Rom@shka Помощь студентам 3 22.06.2009 20:07
[C++] Поменять местами наименьший и второй по величине элементы StudeHt Помощь студентам 2 10.06.2009 23:33
если поле Patr пусто или null то пустую строку возвращает azat БД в Delphi 5 01.02.2008 13:05