Membuat Bujur Sangkar Ajaib dalam Bahasa C
Desember 11, 2011 at 8:20 pm 3 komentar
Malam semua, kali ini saya mau sedikit share tentang tugas pemrograman bahasa C yang kemarin diberikan oleh dosen saya. Kemarin saat praktikum dosen saya share soal bujur sangkar ajaib. Tiba-tiba beliau memperlihatkan contoh bujur sangkar ajaib dan memberitahu cara mengisi angka pada tiap sel di bujur sangkar ajaib. Setelah paham, kami disuruh membuatnya dalam bahasa C.
Bagi yang belum tahu, bujur sangkar ajaib di sini yang dimaksud adalah bujur sangkar yang di dalamnya terdapat angka-angka yang jika dijumlahkan secara vertikal maupun horizontal hasilnya tetap sama. Contohnya seperti ini:
| 8 | 1 | 6 |
| 3 | 5 | 7 |
| 4 | 9 | 2 |
Coba hitung tiap baris dan tiap kolom hasilnya 15, begitu juga jika dijumlahkan secara diagonal. -
Angka selanjutnya selalu ditaruh naik diagonal ke kanan.
-
Jika di atas sudah tidak ada baris lagi dan ke kanan masih ada kolom, taruh di baris paling bawah dan kolom sebelah kanan angka sebelumnya. (lihat angka 2 pada contoh)
-
Jika di kanan sudah tidak ada kolom lagi dan di atas masih ada baris, taruh di kolom paling kiri dan baris atasnya angka sebelumnya. (lihat angka 3 pada contoh)
-
Jika di kanan atas masih ada baris dan ada kolom namun sudah terisi, ditaruh pada kolom yang sama baris bawahnya kolom sebelumnya. (lihat angka 4 pada contoh)
-
Jika di kanan atas masih ada baris dan kolom dan belum terisi angka, taruh saja angka selanjutnya disana. (lihat angka 5 dan 6 pada contoh)
-
Untuk selanjutnya aturan di atas akan ada yang terulang. (lihat angka 7, 8, dan 9)
Begitulah aturan yang saya simpulkan dan saya ubah dalam bahasa C seperti ini:
main()
{
static int a[19][19];
int h,i,j,k,x,y,z,b=3;
a[0][b/2]=1;
x=0;
y=b/2;
for(k=2;k<=b*b;k++)
{
if(x-1>=0&&y+1<=b-1) // ke atas bisa, ke kanan bisa
{
x=x-1;
y=y+1;
//z=1;
if(a[x][y]!=0) // bisa tapi udah ke isi
{
x=x+2;
y=y-1;
//z=2;
}
}
else if(x-1<0&&y+1<=b-1) // ke atas gabisa, ke kanan bisa
{
x=x+(b-1);
y=y+1;
//z=3;
}
else if(x-1>=0&&y+1>b-1) // ke atas bisa, ke kanan gabisa
{
x=x-1;
y=y-(b-1);
//z=4;
}
else if(x-1<0&&y+1>b-1) // ke atas gabisa, ke kanan gabisa
{
x=x+1;
y=y;
//z=5;
}
a[x][y]=k;
//printf("%d %d %d\n",x,y,z); //debug, liat algoritmanya disini
}
//cetak
for(i=0;i<=b-1;i++)
{ for(j=0;j<=b-1;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
getch();
}
Array saya batasi sampai 19 karena dosen saya bilang bahwa untuk bujur sangkar ajaib ganjil maksimal sampai 19 baris dan kolom, saya sendiri tidak mengerti kenapa batasnya hanya sampai 19 saja. :p
Oh iya, berikut tampilan script di atas jika di run:
Demikian sedikit dari saya, semoga artikel ini bermanfaat bagi teman-teman.
Entry filed under: Tak terkategori. Tags: ajaib, algoritma, bujur sangkar ajaib, C, kotak, pemrograman, Tutorial.
3 Komentar Add your own
Tinggalkan Balasan
Trackback this post | Subscribe to the comments via RSS Feed






1.
andikacahya | Januari 14, 2012 pukul 9:03 pm
terlalu rumit algoritmanya,mas punya saya arraynya bisa sampai 100
2.
deeriee | Januari 15, 2012 pukul 3:50 pm
kan menghemat memori dik
3.
Iqbal Mohamad | Januari 22, 2012 pukul 11:16 pm
weeehh
keren bang..