Порядковые номера max и min цифр,натурального числа - C#

  1. Дано натуральное число, в котором все цифры различны. Определить порядковые номера его максимальной и минимальной цифр, считая номера: а) от конца числа; б) от начала числа.


textual

Код к задаче: «Порядковые номера max и min цифр,натурального числа - C#»

[CSHARP]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace System.Collections.Generic.IEnumerable
{
    class Program
    {
        static void Main()
        {
            int n = 851469732;
            var dc = new DigitCollection(n);
            int maxPos = dc.GetMaxDigitPosition();
            int minPos = dc.GetMinDigitPosition();
            Console.WriteLine(dc);
            Console.WriteLine("from head min pos: {0}, from head max pos: {1}", minPos + 1, maxPos + 1);
            Console.ReadKey();
        }
 
        public interface IReadOnlyList<out T> : IEnumerable<T>
        {
            
            T this[int index] { get;}
            int Count { get; }
        }
 
        public sealed class DigitCollection : IReadOnlyList<int>
        {
            private readonly int _number;
            private readonly List<int> _digits;
 
            public DigitCollection(int number)
            {
                _number = number;
                _digits = new List<int>(10);
                FillDigits();
            }
 
            private void FillDigits()
            {
                foreach(var d in new NumberEnumerator(_number))
                {
                    _digits.Add(d);
                    ++Count;
                }
                _digits.Reverse();
            }
 
            public int GetMaxDigitPosition()
            {
                return _digits.IndexOf(_digits.Max());
            }
 
            public int GetMinDigitPosition()
            {
                return _digits.IndexOf(_digits.Min()); 
            }
 
            public override string ToString()
            {
                var str = string.Join(" ", _digits);
                return string.Format("Source Number: {0}{1} Digits: {2}", _number, Environment.NewLine, str);
            }
 
            public IEnumerator<int> GetEnumerator()
            {
                return _digits.GetEnumerator();
            }
 
            IEnumerable<> IEnumerable.GetEnumerator() // IEnumerable<Какой ТИП поставить>?? ошибки показывает требуется ТИП
            {
                return GetEnumerator();
            }
 
            public int Count
            {
                get; private set;
            }
 
            public int this[int index]
            {
                get { return _digits[index]; }
            }
        }
 
        internal sealed class NumberEnumerator : IEnumerator<int>, IEnumerable<int>
        {
            internal int Number
            {
                get; private set;
            }
 
            public NumberEnumerator(int number)
            {
                Number = number;
                _currentNumber = number;
            }
 
            private int _currentNumber;
            private int _digit;
 
            public void Dispose()
            {
                Reset();
            }
 
            public bool MoveNext()
            {
                if(_currentNumber == 0)
                    return false;
                _digit = _currentNumber % 10;
                _currentNumber /= 10;
                return true;
            }
 
            public void Reset()
            {
                _currentNumber = Number;
            }
 
            public int Current
            {
                get { return _digit; }
            }
 
            object IEnumerator.Current
            {
                get { return Current; }
            }
 
            public IEnumerator<int> GetEnumerator()
            {
                return this;
            }
 
            IEnumerator IEnumerable.GetEnumerator()
            {
                return GetEnumerator();
            }
        }
    }
}

СДЕЛАЙТЕ РЕПОСТ

8   голосов, оценка 4.125 из 5



Похожие ответы
  1. Всего неделю изучаю язык, не особо понимаю что и как в нём, надеюсь на вашу помощь. Мы имеем 3 карты: American Express(состоит из 15 цифр и код начинается с 34 или 37), MasterCard(состоит из 16 цифр и код начинается с 51, 52, 53, 54, или 55), Visa(состоит из 13 или 16 цифр и код начинается с 4). INVALID, если карта не начинается с определённых цифр. Нам надо проверить является эта карта законной и какое у неё наименование. Если не законная Для примера возьмём карту: 378282246310005. 1) Чтобы проверить является ли карта свободной умножаем каждое второе число на 2: 7 • 2 + 2 • 2 + 2 • 2 + 4 • 2 + 3 • 2 + 0 • 2 + 0 • 2 2) Получаем: 14 + 4 + 4 + 8 + 6 + 0 + 0. 3) Все полученные цифры складываем: 1 + 4 + 4 + 4 + 8 + 6 + 0 + 0 = 27. 4)Теперь добавим эту сумму (27) к сумме цифр, которые не были умножены на 2: 27 + 3 + 8 + 8 + 2 + 6 + 1 + 0 + 5 = 60. 5) Последняя цифра в этой сумме (60) равна 0, поэтому карта является законной. Я понимаю чисто на словах что нужно проверить, а вот с написанием большие проблемы. 1) Проверяем является ли введённая строка целым числом. Если нет- сразу выводим INVALID. 2) Проверяем на нужное количество цифр в коде. 15- American Express, 16- MasterCard, Visa- 13 или 16. Если нет- выводим INVALID. 3) Проверяем с каких чисел начинается код. American Express- 34 или 37, MasterCard- 51, 52, 53, 54, или 55, Visa- 4. Если с других цифр- выводим INVALID. 4) Проверяем является ли карта законной(пример вычисления есть выше). Если не законная, то выводим INVALID. 5) Если манипуляции выше прошли, то выводим нужную карту и то, что она законна.

  1. В файле matrix.txt хранятся элементы числовой матрицы. Вывести номера столбиков матрицы,сумма квадратов которых наименьшая.

  1. Уже час ищу метод, который вернет первый не занятый номер в массиве, чувствую что он где-то под носом... А пилить велосипед с перебором и поиском не занятого номера в массиве думаю не очень идея...

  1. Дан массив A размер N. вывести в начале его элементы с чётными номерами (в порядке возрастания номеров), а за тем элементы с нечётными номерами (также в порядке возрастания номеров) Помогите пожалуйста)

  1. Здравствуйте. Возник такой вопрос. На форме есть текстбатон, для номера телефона, через него заполняються данные в бд. Так вот, какой тип данных нужен для коректного конвертирования. Я использую такой :C1 '" + Convert.ToInt32(textBoxNumber.Text) + "'. Но при вводе стандартного номера в 10 цифр, появляется ошибка. "Значение было недопустимо малым или недопустимо большим для int32"

  1. Здравствуйте, помогите, пожалуйста, с решение задачи. Задание: дана строка. Определить порядковые номера первой пары одинаковых соседних символов. Если таких символов нет, то должно быть напечатано соответствующее сообщение.

  1. Помогите с решением задачи я просто не знаю что писать дальше,желательно написать в виде кода чтобы было понятно)) Задача: Дана действительная матрица mxn. Определить номера столбцов с максимальными элементами.

  1. В одномерном массиве, состоящем из n целых элементов, вычислить: 1) произведение элементов массива с четными номерами; 2) сумму элементов массива, расположенных между первым и последним нулевыми элементами. Преобразовать массив таким образом, чтобы сначала располагались все положительные элементы, а потом - все отрицательные (элементы, равные 0, считать положительными).

  1. Здравствуйте! Дано задание: Определить номера тех строк целочисленной матрица A[,], которые совпадают с массивом D[K]. Если таких нет выдать сообщение. Я написала код, но он выводит сообщения, что совпадения есть, но не их количество(хотя в самом задании нужно выдать номера строк, если я правильно поняла). В чем же проблема?

  1. Составить программу для определения номера строки и номера столбца прямоугольной матрицы, на пересечении которых находится наибольший по абсолютной величине элемент этой матрицы.