Найти минимальное количество подряд идущих максимальных элементов из данного набора [закрыт]

156
16 мая 2022, 16:30
Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском.

Закрыт 1 год назад.

Улучшить вопрос

fixed

//15. Дано целое число N. Задать N элементов одномерного массива Найти минимальное
//количество подряд идущих максимальных элементов из данного набора.

using System;
namespace Zadacha15_LR8
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("Размерность массива:");
                int n = int.Parse(Console.ReadLine());
                int[] A = new int[n];
                Input(A);
                
                int s1 = MinPovtor(A);
               
                Output(A);
                Console.WriteLine("\n");
                Console.WriteLine("Min количество максимальных элементов{0}", s1);
                
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
        static void Input(int[] A)
        {
            for (int i = 0; i < A.Length; i++)
            {
                {
                    Console.WriteLine("Введите элемент массива{0}", i);
                    A[i] = int.Parse(Console.ReadLine());

                }
            }
        }
        static void Output(int[] A)
        {
            for (int i = 0; i < A.Length; i++)
            {
                Console.Write("{0}", A[i]);
            }
        }
        static int Max(int[] A)
        {
           
            int kmax = 0;
            for (int i = 1; i < A.Length; i++)
            {
                if (A[i] > kmax)
                {
                    kmax = A[i];
                }

            }
           
            return kmax;
        }
        static int MinPovtor(int[] A )
        {
            int kmax = Max(A); // значение повторяющегося элемента
            int s1 = 999999;// кол повторений
            int i = 0;
                while (i < A.Length)
                {
                   int count = 0;
                    while (i < A.Length && A[i] == kmax) 
                    {
                        count++;
                        i++;
                    }
                    if (count < s1) 
                        s1 = count;
                    while (i < A.Length && A[i] != kmax)
                        i++;
                }
            return s1;
        }    
    }
 }
Answer 1

Так логика Max() совершенно неверная.

Чтобы не запутаться, первым проходом найдите максимум (или просто используйте Linq A.Max())

А вторым проходом определяйте длину серий с этим значением - и длина серии определяется, когда серия заканчивается

static int MinPovtor(int[]A, int kmax)     {   
    int minrep = 99999999;
    int rep = 0; 
    for (int i = 0; i <= A.Length; i++) {
        if ((i == A.Length) | (kmax != A[i])) {
           if rep > 0 {
               minrep = min(minrep, rep);
               rep = 0;
           }
        }
        else
            rep++;
    }
    return minrep;
 }  

(и опять же Linq можно сделать кратко, но, наверное, не нужно)

Answer 2

Можете сказать, у меня правильно получилось? В наборе массива (10,10,2,6,6,6,10,10,10,2) получается min количество max repeated элементов:2, Max element=10. Слегка исправил

using System;
namespace Zadacha15_LR8
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("Размерность массива:");
                int n = int.Parse(Console.ReadLine());
                int[] A = new int[n];
                Input(A);
                int s1 = MinPovtor(A);
                int kmax = Max(A);
                Output(A);
                Console.WriteLine("\n");
                Console.WriteLine("Min количество максимальных элементов{0}", s1);
                Console.WriteLine("Мах repeated элемент:{0}", kmax);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
        static void Input (int []A)
        {
            for (int i = 0; i < A.Length; i++)
            {  
                {
                    Console.WriteLine("Введите элемент массива{0}", i);
                    A[i] = int.Parse(Console.ReadLine());
                    
                }
                
            }
        }
        static void Output (int []A)
        {
            for (int i=0;i<A.Length;i++)
            {
                Console.Write("{0}", A[i]);
            }
        }
        static int Max(int[] A)
        {
            int kmax = 0;
            for (int i = 1; i < A.Length; i++)
            {
                if (A[i - 1] == A[i])
                {
                    if (A[i] > kmax)
                    {
                        kmax = A[i];
                    }
                }
            }
                return kmax;
        }
        static int MinPovtor(int[]A)
        {   
            int kmax = 0; // значение повторяющегося элемента
            int s1 = 1;// кол повторений
            for (int i = 1; i < A.Length; i++)
            {if (A[i - 1] == A[i])
                {
                    
                    if (A[i] > kmax)
                    {
                        ++s1;
                        kmax = A[i];
                        return s1;
                        
                    }
                   
                }
                if (A[i] != A[i - 1])
                {
                    int t1 = s1;
                    s1 = 1;
                }
               
            }
            return s1;
        }
    }
}
READ ALSO
сложение элементов массива через ассемблерные вставки

сложение элементов массива через ассемблерные вставки

Поставили задачу написать алгоритм сложения элементов массива на asm(ассемблерные вставки на с),c#,c и сравнить время исполненияНаписал простенький...

296
Помогите с регуляркой на C#!

Помогите с регуляркой на C#!

Есть регулярка, вот она:

171
Не могу синхронизировать потоки c#

Не могу синхронизировать потоки c#

Задание: Необходимо разработать программу, в которой было реализовано два потока (нити)Эти потоки должны запускаться одновременно и сортировать...

140