Как вывести двумерный массив корректно?
Пусть дано:Заполнить массив ? × ? числами от 0 до ?2 − 1 в требуемом порядке:А именно сверху вниз от 0 до 4,от 5 до 9 снизу вверх,от 10 до 14 сверху вниз,от 15 до 19-снизу вверх и от 20 до 24 сверху вниз. Вот мой код,но он не до конца выполняет задачу и выводит цифры от 1 до 25:
//заполнить массив
#include <iostream>
#include <iomanip>
using namespace std;
class Array {
public:
Array();
void Out();
private:
static const int n = 5;
int A[n][n];
};
Array::Array()
{
int Number = 0;
const int maxNumber = n * n;
for (int i = 0; i < n; i++) {
int i2 = i;
if (i % 2)
for (int j = 0; j <= i; j++, i2--) {
A[i2][j] = ++Number;
A[n - 1 - i2][n - 1 - j] = (maxNumber - Number + 1);
}
else
for (int j = 0; j <= i; j++, i2--) {
A[j][i2] = ++Number;
A[n - 1 - j][n - 1 - i2] = (maxNumber - Number + 1);
}
}
}
void Array::Out()
{
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
cout << setw(5) << A[i][j];
cout << endl;
}
}
int main()
{
Array A;
A.Out();
return 0;
}
Как исправить этот код?Помогите пожалуйста.
Ответы (1 шт):
Автор решения: TigerTV.ru
→ Ссылка
Можно пойти еще проще, и не ставить условный оператор if в цикл, а запустить 2 цикла.
for (int i = 0; i < n; i+=2) {
for (int j = 0; j < n; j++) {
A[j][i] = j + i*n;
}
}
for (int i = 1; i < n; i+=2) {
for (int j = 0; j < n; j++) {
A[j][i] = (i + 1) * n - j - 1;
}
}
А можно без умножений
int num = 0;
int d = 1;
int j = 0;
for (int i = 0; i < n; ++i) {
for (;j >= 0 && j < n; j+=d) {
A[j][i] = num++;
}
d = -d;
j += d;
}
Есть третий вариант
int i = 0;
for (int j = 0; j < n; ++j) {
A[j][i] = j;
}
++i;
int num = n;
for (int j = n-1; j >= 0; --j) {
A[j][i] = num++;
}
for (i = 2; i < n; ++i) {
for (int j = 0; j < n; ++j) {
A[j][i] = A[j][i-2] + num;
}
}