Răspuns :
Răspuns:
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
const int MAX_M = 20;
int a[MAX_M + 1][MAX_M + 1];
int main() {
ifstream fin("robinson.in");
ofstream fout("robinson.out");
int m, n, l, c;
fin >> m >> n >> l >> c;
// Calculul recoltelor conform regulilor date
for (int i = 1; i <= m; ++i) {
for (int j = 1; j <= m; ++j) {
if (i == 1 && j == 1) {
a[i][j] = n;
} else if (i == 1) {
a[i][j] = (a[i][j - 1] + 1) % 1000;
} else if (j == 1) {
a[i][j] = (a[i - 1][j] + 1) % 1000;
} else {
a[i][j] = (a[i - 1][j] + a[i][j - 1]) % 1000;
}
}
}
// Afișarea recoltei totale
fout << a[m][m] << endl;
// Determinarea drumului parcurs conform visului lui Robinson
vector<pair<int, int>> positions;
int row = l, col = c;
int dx[] = {0, 1, 0, -1};
int dy[] = {-1, 0, 1, 0};
while (row >= 1 && row <= m && col >= 1 && col <= m) {
positions.push_back({row, col});
int remainder = a[row][col] % 4;
row += dx[remainder];
col += dy[remainder];
}
// Afișarea pozițiilor parcursului
for (const auto& pos : positions) {
fout << pos.first << " " << pos.second << endl;
}
fin.close();
fout.close();
return 0;
}
Explicație:
Sper ca este corect (nu uita sa elimini explicatiile mele suplimentare)
Vă mulțumim că ați ales să vizitați platforma noastră dedicată Informatică. Sperăm că informațiile disponibile v-au fost utile. Dacă aveți întrebări suplimentare sau aveți nevoie de sprijin, nu ezitați să ne contactați. Vă așteptăm cu drag și data viitoare! Nu uitați să adăugați site-ul nostru la favorite pentru acces rapid.