Дан двухмерный массив целых чисел. Массив заполнен нулями и единицами. "Окружить" каждую единицу, заменив только 0 на порядковый номер единицы в массиве, считая от левого верхнего угла и далее по строкам.
Пример входного потока:
5 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
Пример выходного потока:
1 1 2 0 0 1 1 2 0 0 3 3 4 5 5 0 0 5 1 5 0 0 5 5 5
Привожу свою версию, но я явно что-то делаю не так, например, если единица стоит в конце строки, неверно считает. Или, если массив состоит из одной-двух строк или столбцов. Выводит порядковый номер даже когда единиц поблизости нет. Очень прошу помощи!
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int x,y,q=0;
cin >> x >> y;
int a[x][y];
for (int i=0;i<x;i++)
{
for (int j=0;j<y;j++)
{
cin >> a[i][j];
}
}
for (int i=0;i<x;i++)
{
for (int j=0;j<y;j++)
{
if (a[i][j]==1)
{
q++;
int lim1=3,lim2=3;
if (x>3) lim1=3; else lim1=x;
if (y>3) lim2=3; else lim2=y;
for (int m=0;m<lim1;m++)
{
for (int n=0;n<lim2;n++)
{
int t,u;
u=abs(i-1+m);
t=abs(j-1+n);
if (a[u][t]==0) a[u][t]=q;
}
}
a[i][j]=1;
}
}
}
for (int i=0;i<x;i++)
{
for (int j=0;j<y;j++)
{
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}
Задача, которая предшествовала этой в каталоге задач: Дан двухмерный массив целых чисел. Массив заполнен нулями и единицами. "Окружить" каждую единицу двойками, заменив только 0 на 2 (моё решение, все тесты пройдены: cpp.sh/5aeb6).
Как-то так, если я правильно понял условие.
#include <iostream>
#include <vector>
using namespace std;
int main() {
int x, y, q = 0;
cin >> x >> y;
vector<vector<int>> m(x, vector<int>(y, 0));
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
cin >> m[i][j];
}
}
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
if (m[i][j] == 1) {
q++;
// обход подматрицы 3x3, центр которой 1
for (int a = i - 1; a <= i + 1; a++) {
for (int b = j - 1; b <= j + 1; b++) {
// проверка границ и что элемент можно изменить
if (a >= 0 && a < x && b >= 0 && b < y && m[a][b] == 0) {
m[a][b] = q;
}
}
}
}
}
}
for (auto& v : m) {
for (auto& i : v) {
cout << i << ' ';
}
cout << '\n';
}
}
#include <iostream>
int main()
{
int x = 5;
int y = 5;
int matrix[x][y] = { {1, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 1, 0},
{0, 0, 0, 0, 0} };
for (int i = 0; i < x; ++i)
{
for (int j = 0; j < y; ++j)
{
std::cout << matrix[i][j] << " ";
}
std::cout << std::endl;
}
std::cout << std::endl;
int count = 0;
int points[8][2] = { {-1, 1},
{ 0, 1},
{ 1, 1},
{ 1, 0},
{ 1, -1},
{ 0, -1},
{-1, -1},
{-1, 0}};
for (int i = 0; i < x; ++i)
{
for (int j = 0; j < y; ++j)
{
if (matrix[i][j] == 1)
{
++count;
for (auto point : points)
{
int xi = i + point[0];
int yj = j + point[1];
if (xi < 0 || xi >= x)
{
continue;
}
if (yj < 0 || yj >= y)
{
continue;
}
if (matrix[xi][yj] == 0)
{
matrix[xi][yj] = count;
}
}
}
}
}
for (int i = 0; i < x; ++i)
{
for (int j = 0; j < y; ++j)
{
std::cout << matrix[i][j] << " ";
}
std::cout << std::endl;
}
return 0;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
char arr[] = {'а', 'б', 'в', 'г'} когда я пишу такой массив выдаёт ошибку "ошибка: excess elements in char array initializer" что нужно сделать что бы исправить? Я писал не консольное...
Мне нужно что бы несколько объектов вызывали один слот, и можно было понять, какой объект вызвал слотВ данном примере я попробовал использовать...