ArfatM Ответов: 2

C# программа для поиска наибольшего количества повторений в целочисленном массиве [1, 1, 2, 5, 6, 7, 3, 3, 3, 5, 2, 4, 1, 1, 1, 1


Find Highest Repetitive Count in a integer array.
       [1,2,5,4,4,6,7,3,3,5,2,4]

class Program
{
    static void Main(string[] args)
    {              
        int[] array = { 10, 5, 10, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 11, 12, 12 };
        int count = 1;
        for (int i = 0; i < array.Length; i++)
        {
            for (int j = i; j < array.Length - 1 ; j++)
            {

               if(array[j] == array[j+1])
                  count = count + 1;
            }
            Console.WriteLine("\t\n " + array[i] + "occurse" + count);
            Console.ReadKey();
        }
    }
}


Что я уже пробовал:

class Program
{
    static void Main(string[] args)
    {              
        int[] array = { 10, 5, 10, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 11, 12, 12 };
        int count = 1;
        for (int i = 0; i < array.Length; i++)
        {
            for (int j = i; j < array.Length - 1 ; j++)
            {

               if(array[j] == array[j+1])
                  count = count + 1;
            }
            Console.WriteLine("\t\n " + array[i] + "occurse" + count);
            Console.ReadKey();
        }
    }
}

ZurdoDev

И в чем же заключается ваш вопрос?

ArfatM

Найдите наибольшее повторяющееся число и сколько раз оно встречалось в текущем массиве

ZurdoDev

Это не вопрос. Это утверждение. Заметьте, вопрос должен иметь один из этих глупых символов "?".

George Swan

Здесь есть ответ, который использует те же значения массива, что и в вашем примере: https://stackoverflow.com/questions/20765589/finding-duplicate-integers-in-an-array-and-display-how-many-times-they-occurred

2 Ответов

Рейтинг:
13

Maciej Los

Если вы хотите получить самое длинное повторение, взгляните на мой прошлый ответ: Самая длинная повторяющаяся подпоследовательность с использованием только LINQ[^]

Если вы просто хотите получить наибольшее количество элементов, повторяющихся в массиве, вы можете попробовать это:

int[] array = { 10, 5, 10, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 11, 12, 12 };

var groupped = array
	.GroupBy(x=> x)
	.OrderByDescending(grp=> grp.Count())
	.FirstOrDefault();
	
Console.WriteLine($"{groupped.Key} is repeated {groupped.Count()} time(s).");


Если вы хотите отобразить значение и количество повторений, используйте это:
var groupped = array
	.GroupBy(x=> x)
	.OrderByDescending(grp=> grp.Count())
	.ToList();
	
foreach(var d in groupped)
	Console.WriteLine($"{d.Key} is repeated {d.Count()} time(s).");


Sandeep Mewara

+5

Maciej Los

Спасибо, Сандип.

0x01AA

Да, пятерка

Maciej Los

Спасибо, Бруно.

Рейтинг:
1

Patrice T

этот:

if(array[j] == array[j+1])
   count = count + 1;

считается каждые 2 одинаковых последовательных числа
int[] array = { 10, 5, 10, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 11, 12, 12 };
//                         *  *        *  *                  *   *

Изменения в
if(array[i] == array[j])
   count = count + 1;

будет подсчитывать каждое вхождение числа в позицию i

Этот код будет подсчитывать вхождения числа в позицию i
class Program
{
    static void Main(string[] args)
    {              
        int[] array = { 10, 5, 10, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 11, 12, 12 };
        int count = 1;
        for (int i = 0; i < array.Length; i++)
        {
            int count = 1;
            for (int j = i+1; j < array.Length - 1 ; j++)
            {

               if(array[i] == array[j])
                  count = count + 1;
            }
            Console.WriteLine("\t\n " + array[i] + "occurse" + count);
            Console.ReadKey();
        }
    }
}

Теперь вы должны следить за самым высоким счетом и его положением.