Możliwych rozwiązań jest pewnie trochę więcej.
Dla przykładu, który podałeś (5 wierszy i 4 kolumny) można zapisać:
1 10 11 20
2 9 12 19
3 8 13 18
4 7 14 17
5 6 15 16
można zauważyć, że liczby zmieniają się cyklicznie
1 +9 +1 +9
2 +7 +3 +7
3 +5 +5 +5
4 +3 +7 +3
5 +1 +9 +1
czyli w wierszach parzystych zmienia się +9 +7 +5 +3 +1 w wierszach nieparzystych +1 +3 +5 +7 +9
najwyższa wartość o którą liczby mogą się zmienić to 2 razy kolumna minus 1
#include <iostream>
using namespace std;
int rows;
int columns;
int number = 1;
int mod = 1;
int main()
{
cout << "Podaj ilosc wierszy" << endl;
cin >> rows;
cout << "Podaj ilosc kolumn" << endl;
cin >> columns;
cout << "Wierszy: " << rows << endl;
cout << "Kolumn: " << columns << endl;
for(int i=0; i<rows ; i++){
for(int j=0; j<columns ; j++) {
cout << number << " ";
if(j%2 == 1){
number = number + mod;
} else {
number = number + rows*2 - mod;
}
}
number = i+2;
mod = mod + 2;
cout << endl;
}
return 0;
}
pewnie można to jeszcze jakoś uprościć