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

WBOY
Lepaskan: 2023-09-06 11:53:08
ke hadapan
793 orang telah melayarinya

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
Salin selepas log masuk
# 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, < p>
mat[i][j] = (n-2*x)*(n-2*x)-(i-x)-(j-x)
Salin selepas log masuk

Untuk bahagian kiri bawah,

mat[i][j] = (n-2*x-2)*(n-2*x-2) + (i-x) + (j-x)
Salin selepas log masuk

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
Salin selepas log masuk

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;
}
Salin selepas log masuk

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!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan