Найти строку и столбец матрицы, которые удовлетворяют требованиям - C (СИ)

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

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

При решении задачи столкнулся с проблемой, вот условие задачи: Задана прямоугольная таблица А[1:N, 1:N], элементы которой равны 0 или 1, причем А[i, i] = 0 для любого i. Необходимо найти, если они есть, такие строку i0 и столбец j0, чтобы в столбце j0 были все 0, а в строке i0 – все 1 (кроме элемента A[i0, i0], равного 0). Собственно говоря не могу реализовать поиск строк и столбцов. вот что есть на данный момент
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define N 5
int main()
{ clrscr();
  int arr[N][N];
  int i,j;
  srand(time(NULL));
  //zapolnenie masiva
  for (i = 0; i < N; i++)
  {
   for (j = 0; j < N;j++ )
   {
    arr[i][j]=rand()%2;
   }
  }
  //diagonal zapolniaem 0
  for (i=0;i<N;i++){
   for (j=0;j<N;j++){
    if (i==j) arr[i][j]=0;}
    }
   //vivod masiva
     for ( i = 0; i < N; i++){
    for ( j = 0; j < N;j++ ){
       printf ("%d ", arr[i][j]);
    }
    printf ("\n");
     }
   getch();
 
 return 0;
 }
заранее спасибо

Решение задачи: «Найти строку и столбец матрицы, которые удовлетворяют требованиям»

textual
Листинг программы
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define N 4
 
int main()
{ //clrscr();
  int arr[N][N];
  int i,j;
  srand(time(NULL));
  //zapolnenie masiva
  for (i = 0; i < N; i++)
  {
   for (j = 0; j < N;j++ )
   {
    arr[i][j]=rand()%2;
   }
  }
  //diagonal zapolniaem 0
  for (i=0;i<N;i++){
  // for (j=0;j<N;j++){
    /*if (i==j)*/ arr[i][i]=0;}
    
   //vivod masiva
     for ( i = 0; i < N; i++){
        for ( j = 0; j < N;j++ ){
           printf ("%d ", arr[i][j]);
        }
        printf ("\n");
     }
     printf ("\n");
     int sum_row = 0;
     for ( i = 0; i < N; i++){
        for ( j = 0; j < N;j++ ){
            
            if(i!=j)sum_row += arr[i][j];
            }
            if(sum_row==N-1) printf ( "Yes row\n");
            sum_row=0;
            }
     
     int sum_col = 0;
     for ( i = 0; i < N; i++){
        for ( j = 0; j < N;j++ ){
            
            if(i!=j)sum_col += arr[j][i];
            }
            if(sum_col==0) printf ( "Yes col \n");
            sum_col=0;
            }
            
            
   getch();
 
 
 //return 0;
 
 
 }

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

В этом коде:

  1. Создается матрица arr размером N x N, где N - константа, равная 4.
  2. С помощью цикла for заполняется матрица случайными числами от 0 до 1 с помощью функции rand().
  3. С помощью еще одного цикла for по диагонали матрицы устанавливаются значения равные 0.
  4. С помощью двух вложенных циклов for выводится на экран содержимое матрицы.
  5. С помощью двух вложенных циклов for суммируются элементы каждой строки и каждого столбца. Если сумма равна N-1, то выводится сообщение Yes row или Yes col.
  6. В конце программы вызывается функция getch(), которая ожидает нажатия клавиши. Код также содержит комментарии, которые описывают некоторые действия, выполняемые в коде.

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


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

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

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