Модуль 1.8 (Двумерные массивы) в данном модуле будет изучен двумерные массивы иногда их также называют «матрицами».
Ниже представлены примеры задач с решением на C++ на тему Двумерные массивы.
Найдите индексы первого вхождения максимального элемента.
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
int main() {
int n, m, x = 0, y = 0, a, am;
cin >> n >> m;
n *= m;
cin >> am;
for (int i = 1; i < n; i++) {
cin >> a;
if (am < a) {
am = a;
x = i / m;
y = i % m;
}
}
cout << x << " " << y;
}
Дано нечетное число n, не превосходящее 15. Создайте двумерный массив из n×n элементов, заполнив его символами «.» (каждый элемент массива является строкой из одного символа). Затем заполните символами «*» среднюю строку массива, средний столбец массива, главную диагональ и побочную диагональ. В результате «*» в массиве должны образовывать изображение звездочки. Выведите полученный массив на экран, разделяя элементы массива пробелами.
#include <iostream>
using namespace std;
int main() {
int a[15][15];
int N;
cin >> N;
for(int y=0; y<N; y++)
{
for(int x=0; x<N; x++)
{
if(x==y || x==N/2 || y==N/2 || x==N-y-1)
{
cout << "* ";
}
else
{
cout <<". ";
}
}
cout << endl;
}
return 0;
}
Дано число n, не превышающее 100. Создайте массив размером n×n и заполните его по следующему правилу. На главной диагонали должны быть записаны числа 0. На двух диагоналях, прилегающих к главной, числа 1. На следующих двух диагоналях числа 2, и т.д. Выведите полученный массив на экран, разделяя элементы массива пробелами.
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
for (int i = 0; i < n * n; i++) {
if (!(i % n))
cout << endl;
cout << abs(i / n - i % n) << " ";
}
}
Дан двумерный массив и два числа: i и j. Поменяйте в массиве столбцы с номерами i и j
#include <iostream>
using namespace std;
int main()
{
int n, m, first, second;
cin >> n >> m;
int **arr = new int*[n];
for (int i = 0; i < n; arr[i] = new int[m], i++);
for (int i = 0; i < n; i++)for (int j = 0; j < m; cin >> arr[i][j], j++);
cin >> first >> second;
for (int i = 0; i < n; swap(arr[i][first], arr[i][second]), i++);
for (int i = 0; i < n; cout << endl, i++)for (int j = 0; j < m; cout << arr[i][j]<<" ", j++);
return 0;
}
Дано число n, не превосходящее 10, и массив размером n × n. Проверьте, является ли этот массив симметричным относительно главной диагонали. Выведите слово “YES”, если массив симметричный, и слово “NO” в противном случае.
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n;
bool symmetric;
cin >> n;
int a[10][10];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cin >> a[i][j];
}
}
symmetric = true;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (a[i][j] != a[j][i])
symmetric = false;
}
}
if (symmetric)
cout << "YES";
else
cout << "NO";
return 0;
}
Дан квадратный двумерный массив размером n × n и число k. Выведите элементы k-й по счету диагонали ниже главной диагонали (т.е. если k = 1, то нужно вывести элементы первой диагонали, лежащей ниже главной, если k = 2, то второй диагонали и т.д.).
Значение k может быть отрицательным, например, если k = −1, то нужно вывести значение первой диагонали лежащей выше главной. Если k = 0, то нужно вывести элементы главной диагонали.
Программа получает на вход число n, не превосходящие 10, затем массив размером n × n, затем число k.
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n, m, x, y, temp;
cin >> n ; int a[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> a[i][j];
}
}
cin >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if ((i-j)==m){
cout << a[i][j]<< " ";
}
}
}
return 0;
}
Дан двумерный массив размером n×m (n и m не превосходят 1000). Симметричный ему относительно главной диагонали массив называется транспонированным к данному. Он имеет размеры m×n: строки исходного массива становятся столбцами транспонированного, столбцы исходного массива становятся строками транспонированного.
Для данного массива постройте транспонированный массив и выведите его на экран.
#include <iostream>
using namespace std;
int main() {
int n, m, temp;
cin >> n >> m;
if(m>n)
temp = m;
else
temp = n;
int a[temp][temp];
for(int y=0; y<n; y++)
{
for(int x=0; x<m; x++)
{
cin >> a[y][x];
}
}
if(m>n)
{
for(int y=0; y<n; y++)
{
for(int x=y; x<m; x++)
{
temp = a[x][y];
a[x][y] = a[y][x];
a[y][x] = temp;
}
}
}
else
{
for(int x=0; x<m; x++)
{
for(int y=x; y<n; y++)
{
temp = a[x][y];
a[x][y] = a[y][x];
a[y][x] = temp;
}
}
}
for(int y=0; y<m; y++)
{
for(int x=0; x<n; x++)
{
cout << a[y][x] << " ";
}
cout << endl;
}
return 0;
}
В кинотеатре n рядов по m мест в каждом (n и m не превосходят 20). В двумерном массиве хранится информация о проданных билетах, число 1 означает, что билет на данное место уже продан, число 0 означает, что место свободно. Поступил запрос на продажу k билетов на соседние места в одном ряду. Определите, можно ли выполнить такой запрос.
#include <iostream>
using namespace std;
int main() {
const int size = 20;
int n, m;
int arr[size][size];
cin >> n >> m;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
cin >> arr[i][j];
}
}
int k;
cin >> k;
int cnt = 0;
int row = 0;
bool query = false;
for (int i = 0; i < n && !query; ++i) {
for (int j = 0; j < m && !query; ++j) {
if (arr[i][j] == 0) {
++cnt;
}
else {
cnt = 0;
}
if (cnt == k) {
query = true;
row = i + 1;
}
}
cnt = 0;
}
cout << row;
return 0;
}
Дан прямоугольный массив размером n×m. Поверните его на 90 градусов по часовой стрелке, записав результат в новый массив размером m×n.
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n, m, x, y, temp;
cin >> n >> m; int a[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> a[i][j];
}
}
for (int j = 0; j < m; j++) {
for (int i = n-1; i >= 0; i--) {
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}
По данным числам n и m заполните двумерный массив размером n×m числами от 1 до n×m “змейкой”, как показано в примере.
#include <iostream>
#include <cmath>
#include <vector>
#include <iomanip>
using namespace std;
int main() {
int i, j, k, n, m, a[30][30];
cin >> n >> m;
k = 1;
//for (i = 0; i != n; i++) {
// for (j = 0; j != m; j++) {
// cin >> a[i][j];
// }
//}
for (i = 0; i != n; i++) {
if (i % 2 == 0) {
for (j = 0; j != m; j++) {
a[i][j] = k;
k++;
}
}
else {
for (j = m - 1; j >= 0; j--) {
a[i][j] = k;
k++;
}
}
}
for (i = 0; i != n; i++) {
for (j = 0; j != m; j++) {
cout << setw(4) << a[i][j];
}
cout << endl;
}
return 0;
}
По данным числам n и m заполните двумерный массив размером n×m числами от 1 до n×m “диагоналями”, как показано в примере.
#include <iostream>
using namespace std;
int main()
{
int n, m, l = 1;
cin >> n >> m;
int a[n][m];
for(int x = 0; x < n + m; x++)
{
for(int y = 0; y < n; y++)
{
if(x-y>=0 && x-y<m)
{
a[y][x-y] = l;
l++;
}
}
}
//вывод
cout<<" ";
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
std::cout.width(4); std::cout << a[i-1][j-1];}
cout<<endl;}
return 0;
}
Даны числа n и m. Заполните массив размером n × m в шахматном порядке: клетки одного цвета заполнены нулями, а другого цвета — заполнены числами натурального ряда сверху вниз, слева направо. В левом верхнем углу записано число 1.
#include <iostream>
using namespace std;
int main() {
int n, m, c = 1;
cin >> n >> m;
int a[n][m];
for(int y=0; y<n; y++)
{
for(int x=0; x<m; x++)
{
if(x%2 == y%2)
{
a[y][x] = c;
c++;
}
else
{
a[y][x] = 0;
}
}
}
//вывод
cout<<" ";
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
std::cout.width(4); std::cout << a[i-1][j-1];}
cout<<endl;}
return 0;
}
По данным числам n и m заполните двумерный массив размером n×m числами от 1 до n×m по спирали, выходящей из левого верхнего угла и закрученной по часовой стрелке, как показано в примере.
#include <iostream>
using namespace std;
int main()
{
int n, m;
cin >> n >> m;
int a[100][100] = {0};
int c = 1, k = 0, x_s = 1, y_s = 0, x = 0, y = 0;
for (int c = 1; c <= n*m; c++)
{
a[y][x] = c;
x += x_s;
y += y_s;
if (x < 0 || y<0 || x>m-1 || y>n-1 || a[y][x] != 0)
{
x -= x_s;
y -= y_s;
k++;
if (k == 4)
{
k = 0;
}
if (k == 0)
{
x_s = 1;
y_s = 0;
}
if (k == 1)
{
x_s = 0;
y_s = 1;
}
if (k == 2)
{
x_s = -1;
y_s = 0;
}
if (k == 3)
{
x_s = 0;
y_s = -1;
}
x += x_s;
y += y_s;
}
}
cout<<" ";
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
std::cout.width(4); std::cout << a[i-1][j-1];
}
cout<<endl;
}
return 0;
}
Если у вас не отображается решение последних задач, значит у вас включен блокировщик рекламы который вырезает эти ответы
Опять же ответы не мои
14.
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, k;
cin >> n >> k;
vector <string> xe(n);
for (int i = 0; i < n; i++){
xe[i] = «I»;
}
vector <int> x(k);
vector <int> y(k);
for( int j = 0; j < k; j++){
cin >> x[j];
cin >> y[j];
}
for(int i = 0; i < k; i++){
for (int j = x[i] — 1; j <=y[i] — 1; j++)
xe[j] = «.»;
}
for (int i = 0; i < n; i++) {
cout << xe[i];
}
}
13.
#include <iostream>
using namespace std;
int main()
{
int x[8], y[8], x1, y1;
bool f = false;
for (int i=0; i < 8; i++)
{
cin >> x1 >> y1;
x[i] = x1; y[i] = y1;
}
for (int i = 0; i < 7; i++)
{
for (int j = i + 1; j < 8; j++)
{
if (x[i] == x[j] or y[i] == y[j] or abs(x[i] — x[j]) == abs(y[i] — y[j]))
{
f = true;
break;
}
}
}
f ? cout << «YES»: cout << «NO»;
}
12.
#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
unordered_map<int, int> count;
for (int i = 0; i < n; i++) {
count[a[i]]++;
}
for (int i = 0; i < n; i++) {
if (count[a[i]] == 1) {
cout << a[i] << » «;
}
}
cout << endl;
return 0;
}
11.
#include <iostream>
using namespace std;
int main() {
int n,k = 0;
cin >> n;
int a[n];
for (int i = 0; i < n; i++) {
cin >> a[i];
}
for (int i = 0; i < n-1; i ++) {
for (int j = i+1;j<n; j++) {
if (a[i] == a[j]) {
k++;
}
}
}
cout << k;
return 0;
}
10.
#include <iostream>
using namespace std;
int main() {
int n,x;
cin>>n;
int a[n];
for (int i=0;i<n;i++)
{
cin>>a[i];
}
x=a[n-1];
for(int i=n-1;i>0;i—)
{
a[i]=a[i-1];
}
a[0]=x;
for(int i=0;i<n;i++)
{
cout<<a[i]<<‘ ‘;
}
return 0;
}
9.
#include<bits/stdc++.h>
#define s string
#define e endl
#define ch char
#define c cin
#define pr push_back
#define ll long long
#define ct cout
#define f.i insert
using namespace std;
int main()
{
ll v, rt;
cin >> v;
vector <ll> a;
for (ll i = 0; i < v; i++){
cin >> rt;
a.push_back(rt);
}
for (ll i = 1; i < v; i = i + 2) {
rt = a[i];
a[i] = a[i-1];
a[i-1] = rt;
}
for (ll i=0; i<a.size(); i++) {
cout << a[i] << » «;
}
}
8.
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n = 0, uniq = 0;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++)
cin >> a[i];
for (int i = 0; i < n; i++) {
//cout << a[i] << » » << a[i+1] << endl;
if (a[i] != a[i+1]) uniq++; // обращаемся к элементу вне массива (n)
}
cout << uniq << endl;
return 0;
}
7.
#include <bits/stdc++.h>
using namespace std;
int main ()
{
int n, t = 0;
cin >> n;
vector <int> a(n);
long long min = 9223372036854775807;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
for (int i = 0; i < n; i++) {
if (a[i] % 2 == 1 || a[i] % 2 == -1)
{
t++;
if (a[i] < min){
min = a[i];
}}}
if (t == 0)
{
cout << 0;
}
else
{
cout << min;
}
return 0;
}
6.
#include <iostream>
#include <vector>
#include <algorithm>
int main (){
int n;
std::cin >> n;
int x;
std::vector<int> arr;
std::vector<int> arr2;
for(int i = 0; i < n; ++i){
std::cin >> x;
arr.push_back(x);
}
for(int j = 0; j < n; ++j){
if(arr[j] > 0){
arr2.push_back(arr[j]);
}
}
std::sort(arr2.begin(), arr2.end());
std::cout << arr2[0];
return 0;
}
5.
#include <bits/stdc++.h>
using namespace std;
int main() {
int a,b,cnt=0;
cin>>a;
vector<int> v(a);
for (int i=0;i<a;i++) {
cin>>v[i];
}
for(int i=1;i<a;i++) {
if ((v[i] > 0) == (v[i-1] > 0)) {
cout << min(v[i-1], v[i]) << » » << max(v[i — 1], v[i]);
return 0;
}
}
}
4.
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
vector <int> a(n);
for (int i=0; i<n; i++)
cin>> a[i];
for (int i=0; i<n; i++){
if (a[i]>a[i-1] && i!=0){
cout<< a[i] << » «;}
}
return 0;
}
3.
#include <iostream>
using namespace std;
int main()
{
int n,k = 0;
cin >> n;
int a[n];
for(int i = 0;i < n;i++)
{
cin >> a[i];
if (a[i] >0)
{
k++;
}
}
cout << k;
return 0;
}
2.
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int a[n];
for(int i = 0;i < n;i++)
{
cin >> a[i];
if (a[i] % 2 == 0)
{
cout << a[i] <<‘ ‘;
}
}
return 0;
}
1.ОТВЕТ ЭТОГО САЙТА Я НЕ ЧЕКАЛ НО ЭТОТ ОТВЕТ ТОЧНО ПРАВИЛЬНЫЙ
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int a[n];
for (int i = 0; i < n ; i ++)
{
cin >> a[i];
if (i % 2 == 0)
{
cout << a[i] <<‘ ‘;
}
}
return 0;
}