Rumah > Artikel > pembangunan bahagian belakang > Cetak n x n matriks lingkaran menggunakan program C, menggunakan ruang tambahan O(1).
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 -
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 STOPContoh
#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!