Поиск строки с заданным параметром - C (СИ)
Формулировка задачи:
Помогите найти ошибку в коде.
задание описано ниже.
Код вроде неплох, но работает не всегда (
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
/**
Дана целочисленная матрица размера M * N. Найти количество ее строк, все элементы которых различны.
**/
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
srand(time(NULL));
int n,m,i,j,k,t,z;
printf("Введи количество строк матрицы : ");
scanf("%d",&m);
printf("Введи количество столбцов матрицы : ");
scanf("%d",&n);
int arr[m][n];
k=0;
t=0;
printf("Исходная матрица размером %d*%d :\n",m,n);
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
{
arr[i][j]=1+rand()%9;
printf("%d ",arr[i][j]);
}
printf("\n");
}
for (i=0;i<m;i++)
{
for (j=0;j<n-1;j++)
{
for (z=n-1;z>j;z--)
{
if (arr[i][j] == arr[i][j+z])
{k++;}
}
}
if (k==0)
{
t++;
}
//printf("\n");
//printf("%d ",k);
k=0;
}
printf("Количество строк матрицы все элементы которой различны : %d ",t);
return 0;
}Решение задачи: «Поиск строки с заданным параметром»
textual
Листинг программы
for(i=0;i<m;i++){
bool ok=true;
for(j=1;j<m && ok;j++) for(int j2=j-1;j2>=0;j2--) ok=(arr[i][j]==arr[i][j2]);
if(ok) k++;
}
Объяснение кода листинга программы
В данном коде выполняется поиск строки с заданным параметром. Вот список действий, которые происходят в коде:
- Переменная
iинициализируется значением 0. - Переменная
okинициализируется значением true. - Первый вложенный цикл начинается. Он будет выполняться до тех пор, пока значение переменной
jменьше значения переменнойmи значение переменнойokравно true. - Второй вложенный цикл начинается. Он будет выполняться до тех пор, пока значение переменной
j2больше или равно 0 и значение переменнойokравно true. - Значение переменной
okустанавливается равным результату сравнения элементов массиваarr[i][j]иarr[i][j2]. - Если значение переменной
okравно true, то переменнаяkувеличивается на 1. - После завершения второго вложенного цикла, значение переменной
okустанавливается равным true. - После завершения первого вложенного цикла, значение переменной
iувеличивается на 1. - Цикл начинается снова с шага 3.
В итоге, после выполнения всех итераций, в переменной
kбудет храниться количество строк, которые содержат заданный параметр.