Bujur Sangkar Ajaib

Kali ini, saya cuma mau berbagi kode program untuk menampilkan bujur sangkar ganjil. Bujur sangkar ajaib adalah sekelompok bilangan yang membentuk bujur sangkar, dan setiap baris diagonal maupun vertikalnya punya total yang sama.

#include <stdio.h>

int main(){
    int i, nmax, x1, y1, z;
    int x, y;
    z=9;
    int a[10][10];
    nmax=z*z; 
    for(y=0;y<z;y++)
        for(x=0;x<z;x++)
            a[y][x]=0;

    x=(z / 2);
    y=0;
    i=0;
    while (i<nmax){
        i=i+1;
        a[y][x]=i;
        x1=x+1;
        y1=y-1;
        if(x1>=z)x1=0; 
        if(y1<0)y1=z-1;
        
        if(a[y1][x1]!=0){
            x1=x; 
            y1=y+1;
            if(y1>=z)y1=0; 
        }
        x=x1;
        y=y1;
    } 
    
    for(int y=0;y<z;y++){
        for(int x=0;x<z;x++){
            printf("%3d", a[y][x]);
        }
        printf("\n");
    } 
}
Output :
47 58 69 80  1 12 23 34 45
 57 68 79  9 11 22 33 44 46
 67 78  8 10 21 32 43 54 56
 77  7 18 20 31 42 53 55 66
  6 17 19 30 41 52 63 65 76
 16 27 29 40 51 62 64 75  5
 26 28 39 50 61 72 74  4 15
 36 38 49 60 71 73  3 14 25
 37 48 59 70 81  2 13 24 35
Selain bujur sangkar ajaib ganjil, swbenarnya ada versi genapnya. Tapi, contoh di atas hanya bisa digunakan untuk menampilkan bujur sangkar ajaib ganjil. Untuk mengubah ukurannya, kalian bisa mengubah nilai variabel z.