Website Summary Files Commits Branches @commit @diff @stats
path: root / Week10 / Exercise10.cpp
diff options
context:
space:
mode:
Commit5ce214686e668bf185222b518b78d7f47a20b4fd (patch)
Author
 Syndamia <kamen@syndamia.com>
2025-12-07 13:44:16 +0200
Committer
 Syndamia <kamen@syndamia.com>
2025-12-07 13:44:16 +0200
Filesacd2c1e0f3f0c7aa850878a12a9b674b8be1ccf7 /Week10/Exercise10.cpp
upp-2025-solutions-5ce214686e668bf185222b518b78d7f47a20b4fd.tar
upp-2025-solutions-5ce214686e668bf185222b518b78d7f47a20b4fd.tar.gz
upp-2025-solutions-5ce214686e668bf185222b518b78d7f47a20b4fd.zip
Parent6f894be622e8046f43a70e843cff7bd99c58a3c1 (diff)
feat(Week10): Add solutions
1 files changed, 71 insertions, 0 deletions
-rw-r--r--Week10/Exercise10.cpp71
diff --git a/Week10/Exercise10.cpp b/Week10/Exercise10.cpp
new file mode 100644
index 0000000..706f689
--- /dev/null
+++ b/Week10/Exercise10.cpp
@@ -0,0 +1,71 @@
+#include <iostream>
+
+unsigned int** newHourglassMatrix(unsigned int size) {
+ unsigned int** mat = new unsigned int*[size];
+ for (unsigned int row = 0; row < size / 2; row++) {
+ mat[row] = new unsigned int[size - row * 2];
+ mat[size - 1 - row] = new unsigned int[size - row * 2];
+ }
+
+ if (size % 2 == 1)
+ mat[size / 2] = new unsigned int[1];
+ return mat;
+}
+
+void deleteHourglassMatrix(unsigned int** mat, unsigned int size) {
+ for (unsigned int row = 0; row < size / 2; row++) {
+ delete[] mat[row];
+ delete[] mat[size - 1 - row];
+ }
+ if (size % 2 == 1)
+ delete[] mat[size / 2];
+ delete[] mat;
+}
+
+void inputHourglassMatrix(unsigned int** mat, unsigned int size) {
+ for (unsigned int row = 0; row < size; row++) {
+ unsigned int cols = (row < size / 2) ? size - row * 2 : size - (size - 1 - row) * 2;
+ for (unsigned int col = 0; col < cols; col++)
+ std::cin >> mat[row][col];
+ }
+}
+
+void outputHourglassCountour(unsigned int** mat, unsigned int size) {
+ // Първи ред
+ for (unsigned int col = 0; col < size; col++)
+ std::cout << mat[0][col] << ' ';
+
+ /* Втори диагонал */
+ // От първи ред до преди средния изкарваме последния елемент на вс ред
+ for (unsigned int row = 1; row < size / 2; row++)
+ std::cout << mat[row][size - row * 2 - 1] << ' ';
+ // От средния ред до последния изкарваме първия елемент на вс ред
+ for (unsigned int row = size / 2; row < size; row++)
+ std::cout << mat[row][0] << ' ';
+
+ // Последен ред
+ for (unsigned int col = 1; col < size; col++)
+ std::cout << mat[size - 1][col] << ' ';
+
+ /* Главен диагонал */
+ // От последния ред до средния изкарваме последния елемент на вс ред
+ for (unsigned int row = size - 2; row >= size / 2; row--)
+ std::cout << mat[row][size - (size - 1 - row) * 2 - 1] << ' ';
+ // От преди средния ред до първия ред изкарваме първия елемент на вс ред
+ for (unsigned int row = size / 2; row > 0; row--)
+ std::cout << mat[row - 1][0] << ' ';
+
+ std::cout << std::endl;
+}
+
+int main() {
+ unsigned int size;
+ std::cin >> size;
+ unsigned int** hmat = newHourglassMatrix(size);
+ inputHourglassMatrix(hmat, size);
+
+ outputHourglassCountour(hmat, size);
+
+ deleteHourglassMatrix(hmat, size);
+ return 0;
+}