Alx09

Untitled

May 13th, 2020
1,800
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.69 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6. void functie(int n, int k)
  7. {
  8.     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
  9.  
  10.     FILE* g; // variabila de tip fiser
  11.  
  12.     g = fopen("out.txt", "w"); // deschidem in mod scriere
  13.  
  14.     for (i = 1; i <= n; i++) // mergem patratic
  15.     {
  16.         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
  17.             fprintf(g, "%d ", k - i + 1);
  18.         else
  19.             fprintf(g, "%d ", help--); // altfel elementul va fi valoarea lui help sacut 1 pentru fiecare repetitie
  20.         if (i % 2) // daca i este impar
  21.             for (j = 2; j <= n; j++) // afisam numerle in ordine crescatoare
  22.                 fprintf(g, "%d ", ++c);
  23.         else // altfel
  24.         {
  25.             c = c + n; // ne ducem pe valoare maxima de pe linia respectiva
  26.             for (j = 2; j <= n; j++) // si afisam valoarea -1 pentru pentru a obtine sirul descrescator
  27.                 fprintf(g, "%d ", --c);
  28.             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
  29.         }
  30.         fprintf(g, "\n"); // sarim la linie noue
  31.     } // acest program este eficent deoarece nu foloseste o matrice auxiliarea si este liniar patratic ca si timp de executie
  32.  
  33. }
  34.  
  35. int main()
  36. {
  37.     int n, k; // ctim ordinul matricei si linia de inceput
  38.     FILE* f;
  39.     f = fopen("in.txt", "r"); // deschidere mod citire
  40.     fscanf(f, "%d%d", &n, &k); // citim ordin matrice si linia
  41.     fclose(f);// nu ne mai trebuie f asa ca i l inchidem
  42.  
  43.     if (n % 2 == 0 || k == n) // am reusit sa obtin un algorim liniar patratic de memorie O(1)
  44.         functie(n, k); // apelam functia ajutatoare
  45.  
  46.     return 0;
  47. }
Advertisement
Add Comment
Please, Sign In to add comment