Поиск строки в которой находится самая длинная серия одинаковых элементов - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Не могу найти строчку с максимальной серией элементов Ребят, кто знает в чем ошибка, подскажите пожалуйста до меня никак не доходит
void nomer2(int **v, int b, int c)
{
    int i, j, max =0, imax = 0;
    int sum = 0;
    for(i=0;i<b;i++)
    {
        for (j=0;j<c;j++)
        {
 
            if(v[i][j] == v[i][j+1])
                sum++;
            else if(sum>max)
            {
            imax=i;
            max=sum;
            }
         }
    }
 
    printf ("Stroka v kotoroi nahoditsya samaya dlinnaya seria odinakovih elmentov  %d", imax);
 
}

int main ()
{
    int i, j, b, c,z;
    printf("* 1. Kolichestvo stolbcov soderjashih nulevoi element                          *");
    printf("* 2. Nomer stroki s samoi dlinnoi seriei odinakovih elementov                  *");
    printf("* 3. Proverka simmetrichnosti matritsi                                         *");
    printf("* 4. Pomenyat v kajdoi stroke maximalniy element s elementom glavnoi diagonali *");
    scanf("%d", &z);
    int **v;
    printf("Kol-vo strok:\n");
    scanf("%i",&b);
    printf("Kol-vo stolbcov:\n");
    scanf("%i",&c);
    v=(int**)calloc(b, sizeof(int));
    for(i=0;i<b;i++)
    {
        v[i]=(int*)calloc(c, sizeof(int));
    }
    printf("\n Vvedite elementy matrica:\n");
    for(i=0;i<b;i++)
    {
        for(j=0;j<c;j++)
        {
            scanf("%d", &v[i][j]);
        }
        printf("\n");
    }
    printf("\n");
    switch(z)
    {
        case 1:
            nomer1(v, b, c);
            break;
        case 2:
            nomer2(v, b, c);
            break;
        case 3:
            nomer3(v, b, c);
            break;
        case 4:
            nomer4(v, b, c);
            break;
        default:
            printf("Nevernoe znachenie");
            break;
 
    }
    return 0;
}

Решение задачи: «Поиск строки в которой находится самая длинная серия одинаковых элементов»

textual
Листинг программы
int cnt = 0;
    for(i=0;i<b;i++)
    {
        for (cnt = 0, j=1;j<c;j++)
            if(v[i][j-1] == v[i][j])
                ++cnt;
        if(cnt>max)
        {
            imax=i;
            max=cnt;
        }
    }

Объяснение кода листинга программы

В данном коде реализована функция для поиска строки, в которой находится самая длинная серия одинаковых элементов.

  1. Переменная cnt инициализируется нулем и используется для подсчета количества одинаковых элементов в строке.
  2. Внешний цикл for проходит по всем строкам матрицы v.
  3. Внутренний цикл for проходит по всем элементам текущей строки, начиная с первого элемента и до c (длины строки минус один). Переменная j инициализируется единицей, чтобы пропустить первый элемент внешней строки при первом проходе внутреннего цикла.
  4. Если текущий элемент равен следующему элементу, то переменная cnt увеличивается на единицу.
  5. Если переменная cnt становится больше максимального значения max, то обновляются значения переменных imax и max. Значение imax содержит индекс строки с максимальной серией одинаковых элементов, а max содержит длину этой серии.
  6. После завершения внутренних циклов во всех строках, функция возвращает значение переменной imax.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5
Похожие ответы