нужно сделать из массива ромб
надо сделать из квадратной матрицы ромб. если более точно то развернуть квадрат (массив) на 45 градусов вправо. должно выглядеть это так: Исходный массив:
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
Массив в виде ромба:
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
2 3 4 5
3 4 5
4 5
5
мой код:
#include <iostream>
#include <vector>
#include <iomanip>
void printDiamond(const std::vector<std::vector<int>>& matrix) {
int n = matrix.size();
// Верхняя часть ромба
for (int i = 0; i < n; ++i) {
// Печатаем пробелы
std::cout << std::string(2 * (n - i - 1), ' ');
// Печатаем элементы
for (int j = 0; j <= i; ++j) {
std::cout << std::setw(3) << matrix[i][j];
}
std::cout << std::endl;
}
// Нижняя часть ромба
for (int i = 1; i < n; ++i) {
// Печатаем пробелы
std::cout << std::string(2 * (i - 1), ' ');
// Печатаем элементы
for (int j = i; j < n; ++j) {
std::cout << std::setw(3) << matrix[j][i];
}
std::cout << std::endl;
}
}
int main() {
int n;
// Ввод размера массива
std::cout << "Введите размер массива (n x n): ";
std::cin >> n;
// Проверка на положительное значение
if (n <= 0 || n > 10) { // Ограничим размер массива до 10
std::cout << "Размер массива должен быть положительным и
не больше 10." << std::endl;
return 1;
}
// Инициализация массива
std::vector<std::vector<int>> matrix(n, std::vector<int>(n));
// Ввод значений массива
std::cout << "Введите значения массива:" << std::endl;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
std::cin >> matrix[i][j];
}
}
// Вывод исходного массива
std::cout << "\nИсходный массив:" << std::endl;
for (const auto& row : matrix) {
for (int num : row) {
std::cout << num << " ";
}
std::cout << std::endl;
}
// Вывод ромба
std::cout << "\nРомб:" << std::endl;
printDiamond(matrix);
return 0;
}
моя программа делает только верхнюю часть ромба правильно. помогите найти ощибку
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
У вас и верхняя часть неправильно строится, только вы этого, вероятно, не заметили из-за выбранных значений
void printDiamond(const std::vector<std::vector<int>>& matrix) {
int n = matrix.size();
// Верхняя часть ромба
for (int i = 0; i < n; ++i) {
// Печатаем пробелы
std::cout << std::string(2 * (n - i - 1), ' ');
// Печатаем элементы
for (int j = 0; j <= i; ++j) {
std::cout << std::setw(4) << matrix[i-j][j];
}
std::cout << std::endl;
}
// Нижняя часть ромба
for (int i = 1; i < n; ++i) {
// Печатаем пробелы
std::cout << std::string(2 + 2 * (i - 1), ' ');
// Печатаем элементы
for (int j = 0; j < n - i; ++j) {
std::cout << std::setw(4) << matrix[n-j-1][i+j];
}
std::cout << std::endl;
}
}
int main() {
int n = 5; //6;
// Инициализация массива
std::vector<std::vector<int>> matrix(n, std::vector<int>(n));
// Ввод значений массива
//std::cout << "Введите значения массива:" << std::endl;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
//std::cin >> matrix[i][j];
matrix[i][j] = 10+10*i+ 1 + j;
}
}
Пара результатов (онлайн чек):
11
21 12
31 22 13
41 32 23 14
51 42 33 24 15
52 43 34 25
53 44 35
54 45
55
11
21 12
31 22 13
41 32 23 14
51 42 33 24 15
61 52 43 34 25 16
62 53 44 35 26
63 54 45 36
64 55 46
65 56
66