Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- void functie(int n, int k)
- {
- int i, help = n * n, c = k, j; // in variabila vom retine cea mai mare valoare din matrice pe care o com afisa la nevoie
- FILE* g; // variabila de tip fiser
- g = fopen("out.txt", "w"); // deschidem in mod scriere
- for (i = 1; i <= n; i++) // mergem patratic
- {
- if (i <= k) // daca i este mai mic decat k afisam valoarea data de k-i-1 deoarece acesta va fi primul element de pe linia i
- fprintf(g, "%d ", k - i + 1);
- else
- fprintf(g, "%d ", help--); // altfel elementul va fi valoarea lui help sacut 1 pentru fiecare repetitie
- if (i % 2) // daca i este impar
- for (j = 2; j <= n; j++) // afisam numerle in ordine crescatoare
- fprintf(g, "%d ", ++c);
- else // altfel
- {
- c = c + n; // ne ducem pe valoare maxima de pe linia respectiva
- for (j = 2; j <= n; j++) // si afisam valoarea -1 pentru pentru a obtine sirul descrescator
- fprintf(g, "%d ", --c);
- c = c + n - 2; // acum ne intorcem din nou la vloarea minima care este data de acesta formula dearece va urma un caz i impar
- }
- fprintf(g, "\n"); // sarim la linie noue
- } // acest program este eficent deoarece nu foloseste o matrice auxiliarea si este liniar patratic ca si timp de executie
- }
- int main()
- {
- int n, k; // ctim ordinul matricei si linia de inceput
- FILE* f;
- f = fopen("in.txt", "r"); // deschidere mod citire
- fscanf(f, "%d%d", &n, &k); // citim ordin matrice si linia
- fclose(f);// nu ne mai trebuie f asa ca i l inchidem
- if (n % 2 == 0 || k == n) // am reusit sa obtin un algorim liniar patratic de memorie O(1)
- functie(n, k); // apelam functia ajutatoare
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment