Определить, в какой строке матрицы находится больше всего нулей - C (СИ)
Формулировка задачи:
Нужно показать двухмерный массив А[3][3], который состоит из елементов 0 и 1, и указать в какой строке находится больше всего 0. (Заранее спасибо)
Вот код
{int i, j, p, q=0, f, a[3][3]={{0,1,0},{0,0,0},{1,1,1}};
for (i=0;i<3;i++)
for (j=0;j<3;j++)
printf("massiv: \n %d", &a[][]);
scanf("%d", &a);
for (i=0;i<3;i++)
{
p=0;
for(j=0;j<3;j++)
if (f=a[i][j]==0) p=0;
if (q<p){q=p;f=i;};
}
printf ("%d %d", f, q);
getch ();
}Решение задачи: «Определить, в какой строке матрицы находится больше всего нулей»
textual
Листинг программы
/*
============================================================================
Name : c_array_0_1.c
Author : UranFlex
Version : 0.1 alpha
Copyright : Your copyright notice
Description : Показать двухмерный массив А[3][3], который состоит из елементов 0 и 1, и указать в какой строке находится больше всего 0.
Если таких строк несколько - взять первую из них. Нумерация строк в матрице с начинается нуля.
C, Ansi-style.
============================================================================
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define SZ 3 // размер матрицы
//функция заполняет квадратную матрицу псевдослучайными данными
void FillMatrix( int* matrix, const int size, const unsigned randRange, const int shift );
//функция выводит на экран квадратную матрицу
void PrintMatrix( int* const matrix, const int size );
// функция возвращает номер первой из строк, в которой больше всего нулей,
// или -1 если строки хотя бы с одним нулем не найдено в матрице
int FindRowMaxCount( int* const matrix, const int size );
int main( void ) {
srand( time( 0 ) ); // засеять генератор случайных чисел
int A[ SZ ][ SZ ]; // объявляем нашу матрицу
FillMatrix( *A, SZ, 2, 0 ); // заполняем матрицу псевдослучайными значениями типа int от 0 до 1 включительно
// выводим матрицу на экран
puts( "Исходная матрица" );
PrintMatrix( *A, SZ );
// ищем первую строку с наибольшим количествм нулей
int row = FindRowMaxCount( *A, SZ );
// если нет строк содержащих нули
if ( row == -1 )
puts( "Нет строк содержащих нули" );
else // а если все же есть такие
printf( "Первая строка с наибольшим количествм нулей %d\n", row );
return EXIT_SUCCESS;
}
void FillMatrix( int* matrix, const int size, const unsigned randRange, const int shift ) {
size_t i, j;
for ( i = 0; i < size; ++i )
for ( j = 0; j < size; ++j )
matrix[ i * size + j ] = shift + rand() % randRange;
}
void PrintMatrix( int* const matrix, const int size ) {
size_t i, j;
for ( i = 0; i < size; ++i ) {
for ( j = 0; j < size; ++j )
printf( "%d ", matrix[ i * size + j ] );
puts( "" );
}
}
int FindRowMaxCount( int* const matrix, const int size ) {
int i, j, row = -1, currCount = 0, maxCount = 0;
for ( i = 0; i < size; ++i ) {
currCount = 0;
for ( j = 0; j < size; ++j )
if ( matrix[ i * size + j ] == 0 )
++currCount;
if ( currCount > maxCount ) {
maxCount = currCount;
row = i;
}
}
return row;
}
Объяснение кода листинга программы
Код решает задачу поиска строки в квадратной матрице, в которой больше всего нулей. Список функций и их описания:
- FillMatrix - заполняет матрицу псевдослучайными данными
- PrintMatrix - выводит матрицу на экран
- FindRowMaxCount - возвращает номер первой строки с наибольшим количеством нулей Основная функция main содержит следующие действия:
- Инициализация генератора случайных чисел
- Объявление и заполнение матрицы A псевдослучайными значениями от 0 до 1
- Вывод матрицы на экран
- Поиск первой строки с наибольшим количеством нулей
- Вывод результата на экран Список действий в функции FillMatrix:
- Инициализация переменных i и j
- Заполнение матрицы псевдослучайными значениями от 0 до 1 Список действий в функции PrintMatrix:
- Инициализация переменных i и j
- Вывод значений матрицы на экран построчно Список действий в функции FindRowMaxCount:
- Инициализация переменных i, j, row, currCount и maxCount
- Проход по всем строкам матрицы
- Обновление значения currCount для каждой строки
- Обновление значения maxCount, если найдено большее количество нулей
- Обновление значения row, если найдено большее количество нулей и row еще не задано
- Возврат значения row Таким образом, в коде решается задача поиска строки с наибольшим количеством нулей в квадратной матрице.