Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cetak n x n matriks lingkaran menggunakan program C, menggunakan ruang tambahan O(1).

Cetak n x n matriks lingkaran menggunakan program C, menggunakan ruang tambahan O(1).

WBOY
WBOYke hadapan
2023-09-06 11:53:08788semak imbas

Diberi integer positif n, dan bina matriks lingkaran n x n menggunakan hanya O(1) ruang tambahan mengikut arah jam

Matriks lingkaran ialah matriks yang berfungsi seperti lingkaran , ia akan bermula dari asal bulatan dan berputar mengikut arah jam. Jadi tugasnya adalah untuk mencetak matriks dalam bentuk lingkaran menggunakan ruang O(1) bermula dari 2 → 4 → 6 → 8 → 10 → 12 → 14 → 1 6→ 18.

Di bawah ialah contoh matriks lingkaran -

使用C程序打印n x n的螺旋矩阵,使用O(1)额外空间

Contoh

Input: 3
Output:
   9 8 7
   2 1 6
   3 4 1
# dengan kod infinis🎜 Ia menjadi mudah, tetapi ia tidak secekap program terbaik, atau kodnya adalah kedua-dua memori dan masa yang cekap. Jadi untuk mengekalkan susunan lingkaran empat gelung digunakan, masing-masing satu untuk sudut atas, kanan, bawah dan kiri matriks, tetapi jika kita membahagikan matriks kepada dua bahagian, sudut kanan atas dan sudut kiri bawah, kita boleh terus menggunakan Ini konsep

Untuk bahagian atas sebelah kanan,
mat[i][j] = (n-2*x)*(n-2*x)-(i-x)-(j-x)
Untuk bahagian kiri bawah,

mat[i][j] = (n-2*x-2)*(n-2*x-2) + (i-x) + (j-x)

Nota #🎜#🎜 🎜 🎜#Kami sedang menulis program untuk mencetak gandaan matriks 2Algoritma

int spiralmatrix(int n)
START
STEP 1: DECLARE i, j, a, b, x
STEP 2: LOOP FOR i = 0 AND i < n AND i++
   LOOP FOR j = 0 AND j < n AND j++
      FIND THE MINIMUM IN (i<j ) AND ASSIGN IT TO a
      FIND THE MINIMUM (n-1-i) < (n-1-j) AND ASSIGN IT TO b
      THEN ASSIGN THE LEAST VALUE FROM a AND b TO x
      IF i <= j THEN,
         PRINT THE VALUE OF 2* ((n-2*x)*(n-2*x) - (i-x) - (j-x))
      ELSE
         PRINT THE VALUE OF 2*((n-2*x-2)*(n-2*x2) + (i-x) + (j-x))
   END LOOP
   PRINT NEWLINE
END LOOP
STOP

Contoh

rreeeput #

Jika kita menjalankan program di atas maka ia akan menghasilkan output berikut -

#include <stdio.h>
//For n x n spiral matrix
int spiralmatrix(int n){
   int i, j, a, b, x; // x stores the layer in which (i, j)th element exist
   for ( i = 0; i < n; i++){
      for ( j = 0; j < n; j++){
         // Finds minimum of four inputs
         a = ((i<j ? i : j));
         b = ((n-1-i) < (n-1-j) ? (n-1-i) : (n-1-j));
         x = a < b ? a : b;
         // For upper right half
         if (i <= j)
            printf("%d\t ", 2 * ((n-2*x)*(n-2*x) - (i-x) - (j-x)));
            // for lower left half
         else
            printf("%d\t ", 2*((n-2*x-2)*(n-2*x-2) + (i-x) + (j-x)));
      }
      printf("</p><p>");
   }
}
int main(int argc, char const *argv[]){
   int n = 3;
   spiralmatrix(n);
   return 0;
}

Atas ialah kandungan terperinci Cetak n x n matriks lingkaran menggunakan program C, menggunakan ruang tambahan O(1).. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam