Заданы две матрицы $A$ и $B$. Найдите их сумму $C$ = $A$ + $B$.
Входные данные
Первая строка содержит размеры матриц $n$ и $m$ $(1 \leqslant n, m \leqslant 100)$. Следующие $n$ строк содержат по $m$ целых чисел и описывают матрицу $A$. Далее следует пустая строка, после чего в таком же формате задается матрица $B$.
Выходные данные
Выведите матрицу $С$: $n$ строк по $m$ целых чисел.
Тесты
Входные данные
Выходные данные
1 1
2
3
5
1 5
4 3 7 2 1
3 2 2 1 6
7 5 9 3 7
2 2
0 4
2 3
5 4
1 6
5 8
3 9
3 4
3 4 5 6
1 2 3 4
7 6 5 4
0 0 -3 -2
-1 3 4 5
5 6 1 2
3 4 2 4
0 5 7 9
12 12 6 6
3 3
2 -128 47
-365 5 56
243 42 12
678 43 76
4 345 -23
97 -453 18
680 -85 123
-361 350 33
340 -411 30
Код
C++
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
#include <iostream>
usingnamespacestd;
intmain(){
intn,m;
cin>>n>>m;
intmatrix1[n][m];
intmatrix2[n][m];
intmatrix_sum[n][m]={0};
for(inti=0;i<n;i++){
for(intj=0;j<m;j++){
cin>>matrix1[i][j];
}
}
for(inti=0;i<n;i++){
for(intj=0;j<m;j++){
cin>>matrix2[i][j];
}
}
for(inti=0;i<n;i++){
for(intj=0;j<m;j++){
matrix_sum[i][j]=matrix1[i][j]+matrix2[i][j];
cout<<matrix_sum[i][j]<<" ";
}
cout<<endl;
}
return0;
}
Решение
Чтобы найти сумму двух матриц, необходимо сложить их соответствующие элементы.
Попав в пещеру с сокровищами, наш Алладин не стал брать старую почерневшую лампу. Он кинулся собирать в свой рюкзак золотые монеты и драгоценные камни. Он бы, конечно, взял все, но чудес не бывает — слишком большой вес рюкзак может просто не выдержать.
Много раз он выкладывал одни вещи и на их место помещал другие, пытаясь как можно выше поднять стоимость взятых драгоценностей.
Требуется определить максимальную стоимость груза, который Алладин может поместить в свой рюкзак.
Будем считать, что в пещере имеются предметы $n$ различных типов, количество предметов каждого типа не ограничено. Максимальный вес, который может выдержать рюкзак, равен $w$. Каждый предмет типа $i$ имеет вес $w_{i}$ и стоимость $v_{i}$ $(i = 1, 2, \ldots, n)$.
Входные данные
В первой строке содержится два натуральных числа $w$ и $n$ $(1 \leqslant w \leqslant 250, 1 \leqslant n \leqslant 35)$ — максимальный вес предметов в рюкзаке и количество типов предметов. Следующие $n$ строк содержат по два числа $w_{i}$ и $v_{i}$ $(1 \leqslant w_{i} \leqslant 250, 1 \leqslant v_{i} \leqslant 250)$ — вес предмета типа $i$ и его стоимость.
Выходные данные
Выведите максимальную стоимость груза, вес которого не превышает $w$.
Допустим $w = 9$, $n = 2$, первый предмет $w_{1} = 3$, $n_{1} = 4$, а второй предмет $w_{2} = 2$, $n_{2} = 1$. После того как считаем условие в два одномерных или один двумерный массив (как вам удобнее). Создадим одномерный массив в котором его размер будет равен $w$ и первый элемент будет равен 0, а остальные будут равны минус бесконечности или как в нашем случае (в коде) -1, как показано на (рис. 1). И дальше как показано на (рис. 2) начиная с элемента с номером веса предмета мы прибавляем его стоимость к стоимости предыдущей как показано в коде
s[j]=s[j-WeiCos[i][0]]+WeiCos[i][1];, если прошлый не минус бесконечность. И так же со вторым элементом, когда они пересекаются с первым мы их сравниваем и вписываем в массив, больший. И в самом конце проходим заново массив и выбираем самый больший элемент, где бы он ни был как показано на (рис. 3). И таким образом на последних позициях которые равняются весу, будут записаны самые дорогие комбинации, благодаря записи самых дорогих элементов в ячейки.
Вывести квадрат, состоящий из $N \times N$ клеток, заполненных числами от $1$ до $N^{2}$ по спирали.
Входные данные
В первой строке находится единственное число $N (2 \leq N \leq 100)$.
Выходные данные
Выводится $N$ строк по $N$ чисел, разделённых пробелами. Не допускается начинать спираль в ином, кроме верхнего левого, углу, закручивать спираль против часовой стрелки или изнутри наружу.
a[(n/2)][(n/2)]=(n*n);// если N - нечетное то находим центр матрицы и заполняем его числом N * N
}
for(inti=0;i<(n/2);i++){
for(intj=i;j<(n-i);j++){// (n - i) - чтоб с каждым разом сторона становилась меньше
a[i][j]=m;
m++;
}
for(intj=1;j<(n-i-i);j++){// начинаем с первого эл. так-как нулевой уже записан
a[(j+i)][(n-i)-1]=m;// (n - i) - 1 - отнимаем 1 чтоб не выходило за рамки массива
m++;
}
for(intj=(n-2)-i;j>=i;j--){// (n - 2) - i - отнимаем 1 чтоб не выходило за рамки массива и еще одну 1
a[(n-i)-1][(j)]=m;// потому-что предыдущий эл. уже заполнен.
m++;
}
for(intj=((n-i)-2);j>i;j--){
a[j][i]=m;
m++;
}
}
for(inti=0;i<n;i++){
for(intj=0;j<n-1;j++){
cout<<a[i][j]<<" ";
}
cout<<a[i][n-1]<<endl;
}
return0;
}
Решение
Для того чтобы решить эту задачу нам нужно определить способ заполнения. Первым делом, если $N$ — нечетное, то находим центр матрицы и заполняем его числом $N \times N $
a[(n/2)][(n/2)]=(n*n);. В условии написано, что “Не допускается начинать спираль в ином, кроме верхнего левого углу, закручивать спираль против часовой стрелки или изнутри наружу.”, то есть начинать мы будем с верхнего левого угла. Для этого мы сделаем цикл
for(inti=0;i<(n/2);i++); , в котором сделаем 4 такта. Каждый такт заполняет определенную часть матрицы:
1 такт – заполняет верхнюю грань слева направо;
2 такт – заполняет правую грань сверху вниз;
3 такт – заполняет нижнюю грань справа налево;
4 такт – заполняет левую грань снизу вверх, как показано на рисунке ниже.
Выводим все как обычную матрицу, но с одним условием, после последнего элемента не должно стоять пробела, поэтому я вывел последний элемент отдельно и после него осуществил переход на новую строку.
В театре [latex]n[/latex] рядов по [latex]m[/latex] мест в каждом. Даны две матрицы — в первой записаны стоимости билетов. Вторая сообщает, какие билеты проданы, а какие — нет ([latex]1[/latex] — соответствующий билет продан, [latex]0[/latex] — не продан).
Определите общую выручку от спектакля.
Входные данные
Сначала записано число [latex]n[/latex], затем число [latex]m[/latex] ([latex]n[/latex], [latex]m \leqslant 500[/latex]). После задана матрица стоимостей билетов ([latex]n[/latex] строк по [latex]m[/latex] чисел, каждое из чисел от [latex]0[/latex] до [latex]10000[/latex]). Далее задана матрица проданных билетов — снова [latex]n[/latex] строк по [latex]m[/latex] чисел.
Выходные данные
Выведите общую выручку от продажи билетов.
Тесты
№
Входные данные
Выходные данные
1
3 3
25
1 2 3
4 5 6
7 8 9
1 0 1
0 1 0
1 0 1
2
2 2
0
1 1
2 2
0 0
0 0
3
4 5
380
15 16 17 18 19
19 18 17 16 15
19 20 21 22 23
23 22 21 20 19
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
Код программы с использованием одномерных массивов
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
usingnamespacestd;
intmain(){
intx[500*500];
intn,m;
cin>>n>>m;
intnm=n*m;
for(inti=1;i<=nm;i++){
cin>>x[i];
}
intk;
longlongintv=0;
for(inti=1;i<=nm;i++){
cin>>k;
v+=k*x[i];
}
cout<<v<<endl;
return0;
}
Решение задачи
Описываем целочисленный одномерный массив
x[500*500] для хранения матрицы стоимостей билетов. Описываем целочисленные переменные [latex]n[/latex] и [latex]m[/latex] (количество строк и столбцов матрицы) и считываем их. Описываем целочисленную переменную [latex]nm[/latex] (количество мест в зале) и инициализируем ее произведением [latex]n \cdot m[/latex]. Цикл инициализирует [latex]nm[/latex] элементов массива [latex]x[/latex]. Описываем целочисленную переменную [latex]k[/latex], которая принимает значения [latex]0[/latex] или [latex]1[/latex] (билет не продан или продан), и целочисленную переменную [latex]v[/latex] — стоимость проданных билетов ([latex]v[/latex] имеет тип
longlongint, так как максимальное значение, которое она может принять, составляет [latex]500 \cdot 500 \cdot 10000=2500000000[/latex]). Цикл считывает значения [latex]k[/latex] и увеличивает [latex]v[/latex] на
k*x[i].
Код программы с использованием многомерных массивов
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
usingnamespacestd;
intx[500][500];
intmain(){
intn,m,p;
cin>>n>>m;
for(inti=0;i<n;i++)
for(intj=0;j<m;j++)
cin>>x[i][j];
unsignedlonglongv=0;
for(inti=0;i<n;i++){
for(intj=0;j<m;j++){
cin>>p;
if(p)v+=x[i][j];
}
}
cout<<v;
}
Решение задачи
По условию заданы количество строк [latex]n[/latex] и количество столбцов [latex]m[/latex] матрицы стоимости театральных билетов ( [latex] n,m\leqslant 500[/latex], каждое из чисел от [latex]0[/latex] до [latex]10000[/latex] ). Описываем целочисленную матрицу
x[500][500]. Объявляем целочисленные переменные [latex]n[/latex] и [latex]m[/latex] и вводим их значения с клавиатуры. Считываем матрицу
x. Объявляем переменную
unsignedlonglongv=0 — стоимость проданных билетов. Целочисленная переменная [latex]p = 1[/latex], если билет на ( [latex]i,j[/latex] )-е место продан, и [latex]p = 0[/latex] — в противном случае. Во вложенных циклах считываем значение [latex]p[/latex] из матрицы проданных билетов. Проверяем [latex]p[/latex] на положительность и увеличиваем [latex]v[/latex] на стоимость билета на ( [latex]i,j[/latex] )-е место.
Задана матрица размера $n \times n$. Найдите количество и сумму ее четных отрицательных элементов.
Входные данные
Первая строка содержит число $n \left(1 \leq n \leq 100\right)$. Следующие строки содержат матрицу $n \times n$. Элементы матрицы по модулю не больше $100$.
Выходные данные
Выведите в одной строке количество и сумму четных отрицательных чисел в матрице.
При обработке двумерного массива я использовал один цикл длиной в $n^2$ витков.
В нём я обращался к элементам с помощью целого и остатка от деления на $n$, то есть изменял второй индекс заново через каждые $n$ элементов, увеличивая, при таком переходе, первый индекс на единицу.
Используя этот приём я избежал вложенных циклов и просматривал элементы в том же порядке, как если бы их использовал.
Выведите двумерный массив, размерами [latex]n \times n[/latex], заполненный числами от [latex]1[/latex] до [latex]n^2[/latex] по спирали. Числовая спираль начинается в левом верхнем углу и закручивается по часовой стрелке.
Входные данные
Одно число [latex]n (1 \leqslant n \leqslant 10)[/latex].
Выходные данные
Выведите [latex]n^2[/latex] чисел – заполненный по спирали массив.
Все решение задачи сводится к тому, чтобы постепенно заполнять крайние квадраты, «окаймляя» внутренность массива и постепенно сужая диапазон заполнения и длину стороны заполняемого квадрата. В основном цикле вложенными циклами поочередно заполняем строки и столбцы: верхнюю, крайний справа, нижнюю, крайний слева. После «сворачиваем» вправо, когда вложенные циклы заканчиваются и во внешнем(основном) счетчик увеличивается на 1. Полный цикл на n действий делать смысла не имеет в силу того, что, дойдя до половины, массив уже будет полностью заполнен в строках ниже.
Условие задачи
Решить систему двух линейных уравнений с двумя неизвестными по формулам Крамера. Система уравнений, приведенная во входных данных, имеет вид:
[latex]\begin{cases} 5x_1+8x_2=11 \\ -3x_1+6x_2=15 \end{cases}[/latex]
Входные данные
Первая строка содержит коэффициенты первого уравнения, а вторая строка содержит коэффициенты второго. Все входные числа разделены одним пробелом и не превышают по модулю $100$.
Выходные данные
Первый корень системы уравнений вывести в первой строке, а второй корень во второй строке с точностью до $0.001$.
Дана прямоугольная доска [latex]M×N[/latex], некоторые клетки в которой вырезаны. Сколькими способами можно поставить на неё «уголок» из трёх клеток так, чтобы все три клетки уголка находились внутри доски и не были вырезаны?
Входные данные
В первой строке входного файла даны два числа [latex]M[/latex] и [latex]N[/latex] [latex](1 \leq M, N \leq 100)[/latex], разделённые пробелом. В следующих [latex]M[/latex] строках содержится по [latex]N[/latex] символов в каждой; [latex]i[/latex]-ый символ [latex]j[/latex]-ой из этих строк равен ‘X’ (большая буква икс), если клетка вырезана, и ‘.’ (точка) в противном случае.
Выходные данные
Выведите одно число — сколько существует способов поставить уголок на данную доску.
Для решения данной задачи создаем динамический массив типа
boolx на
y. Заполняем соответствующий элемент значением
true, когда вводится «.» и значением
false в противном случае. Далее увеличиваем значение количества уголков на $1$, если существуют не пустые клетки.
Петя очень любит шоколад. И Маша очень любит шоколад. Недавно Петя купил шоколадку и теперь хочет поделиться ею с Машей. Шоколадка представляет собой прямоугольник $n \cdot m$, который полностью состоит из маленьких шоколадных долек — прямоугольников $2 \cdot 1$.
Петя делит шоколадку на две части, разламывая ее вдоль некоторой прямой, параллельной одному из краев шоколадки. Ни Петя, ни Маша не любят ломаные дольки, поэтому Петя хочет разломать шоколадку так, чтобы ни одна долька не была повреждена.
Помогите Пете поделиться шоколадкой с Машей.
Входные данные
В первой строке входного файла два целых числа $n$ и $m$ ($1 \le n, m \le 20$, хотя бы одно из чисел $n$ и $m$ — четно). Далее следуют $n$ строк по $m$ чисел в каждой — номера долек, в которые входят соответствующие кусочки шоколадки. Дольки имеют номера от $1$ до $\frac{n \cdot m}{2}$, и никакие две дольки не имеют одинаковые номера.
Выходные данные
В выходной файл выведите «$Yes$», если Петя может разломать шоколадку, не повредив дольки. Иначе выведите «$No$».
Для решения данной задачи нужно представить шоколадку как двухмерный массив и проверить, можно ли разломать плитку шоколада ровно, то есть одинаковое ли количество «строк» и «столбцов» шоколада. Если так, то возвращается значение
true, и
false в обратном случае. Для этого были созданы функции
BreakRow и
BreakColumn с возвращаемым значением типа
bool. Затем стоит проверить возвращаемое значение. Если одна из функций принимает значение
true, то выводим положительный ответ. В противном случае ответ отрицательный.
Для отправки комментария необходимо войти на сайт.