Задача: Даны две целочисленные квадратные матрицы порядка 6. Найти последовательность из нулей и единиц [latex]b_{1},\ldots,b_{6}[/latex] такую, что [latex]b_{i}=1[/latex], когда:
в)[latex]i[/latex]-e строки первой и второй матриц содержат вместе не более трех положительных элементов;
Первая матрица | Вторая матрица | [latex]b_{1},\ldots,b_{6}[/latex] |
2 4 5 -1 -2 -3 -1 -2 -3 1 -3 -2 2 4 5 -1 -2 -3 2 4 5 -1 -2 -3 -1 -2 -3 1 -3 -2 2 4 5 -1 -2 -3 |
2 4 5 -1 -2 -3 -1 -2 -3 1 -3 -2 2 4 5 -1 -2 -3 2 4 5 -1 -2 -3 -1 -2 -3 1 -3 -2 2 4 5 -1 -2 -3 |
010010 |
8 5 -2 -4 -2 -1 -1 -2 0 1 0 2 11 -4 6 0 0 -3 1 3 -5 0 2 -3 -11 0 -3 1 -3 -2 1 -4 4 0 0 0 |
0 0 0 0 0 0 -7 -4 -5 1 -4 -2 2 -4 0 -1 -2 -3 3 1 -5 9 -6 -7 -1 -2 -3 0 -3 2 2 4 5 5 7 8 |
111010 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
#include <iostream> using namespace std; const int n = 6 ; int Read(int a[n][n]) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cin >> a[i][j]; } } } int main() { int a[n][n]; int b[n][n]; int c[n]; int count = 0; Read(a); Read(b); for (int i = 0; i < n; i++) { count = 0; for (int j = 0; j < n; j++) { if (a[i][j]>0) count++; if (b[i][j]>0) count++; } c[i] = count <= 3? 1: 0; } for (int j = 0; j < n; j++) { cout<<c[j]; } return 0; } |
Вводим две матрицы 6×6. Создаем одномерный массив с шестью элементами. В цикле просматриваем одновременно обе строки каждого массива и если находим положительный элемент то увеличиваем счетчик на один. Проверяем значение счетчика, если оно меньше трех, то в одномерный массив записываем 1, если больше, то 0.
Код программы на Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
import java.util.*; import java.lang.*; import java.io.*; class Main { public static void main (String[] args) throws java.lang.Exception { Scanner in = new Scanner(System.in); int n = 6 ; int[][]a=new int[n][n]; int[][]b=new int[n][n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { a[i][j]=in.nextInt(); } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { b[i][j]=in.nextInt(); } } int[]c=new int[n]; int count = 0; for (int i = 0; i < n; i++) { count = 0; for (int j = 0; j < n; j++) { if (a[i][j]>0) count++; if (b[i][j]>0) count++; } c[i] = count <= 3? 1: 0; } for (int j = 0; j < n; j++) { System.out.print(c[j]); } } } |
— Лучше сделать функцию для ввода матриц. Автор задачи специально придумал две матрицы, чтобы Вам не захотелось писать один и тот же код дважды.
— Лесенка в 17-й
— Зачем два условных оператора 29-30? Забыли про логическое «и»?
— Строки 32-39 (18% строк кода) можно заменить на c[i] = count <= 3? 1: 0;
Но программа работает правильно 🙂
Что значит сделать функцию для ввода? Чтобы бы программа сама делала матрицу из случайных значений и выводила? В 29-30 я думал поставить «и» или «или», но если поставить «и», то и a[i][j] и b[i][j] должны будут одновременно быть больше нуля.
Функция для ввода — это некоторая функция, которая в качестве аргументов принимает размер матрицы и ссылку на нее и осуществляет ввод этой матрицы с консоли.
Таким образом, вместо того, чтобы для каждой матрицы писать ввод отдельно, Вам будет достаточно дважды вызвать эту функцию, но от разных матриц.
Ясно, просто функцию для ввода сделать, теперь дошло.
С «и» я ошибся — прочитал условие с другой буквой варианта.
Что касается ввода, то если после разъяснения Олега Александровича остались вопросы, посмотрите как здесь сделан ввод.
Теперь Вы вводите всё по два раза. Через функцию и без 🙂
Отступы внутри функции забыли.
Оу. Видимо забыл лишний код стереть.
Засчитано