Поиск строки в которой находится самая длинная серия одинаковых элементов - 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;
}
}
Объяснение кода листинга программы
В данном коде реализована функция для поиска строки, в которой находится самая длинная серия одинаковых элементов.
- Переменная
cntинициализируется нулем и используется для подсчета количества одинаковых элементов в строке. - Внешний цикл
forпроходит по всем строкам матрицыv. - Внутренний цикл
forпроходит по всем элементам текущей строки, начиная с первого элемента и доc(длины строки минус один). Переменнаяjинициализируется единицей, чтобы пропустить первый элемент внешней строки при первом проходе внутреннего цикла. - Если текущий элемент равен следующему элементу, то переменная
cntувеличивается на единицу. - Если переменная
cntстановится больше максимального значенияmax, то обновляются значения переменныхimaxиmax. Значениеimaxсодержит индекс строки с максимальной серией одинаковых элементов, аmaxсодержит длину этой серии. - После завершения внутренних циклов во всех строках, функция возвращает значение переменной
imax.