Bu hafta karışık bir uygulama örneği ile diziler ile alakalı çalışma yapmış olacağız. Uygulamamızın ingilizce karşılığı Locker Puzzle. Bir çeşit bulmaca gibi bir şey.
Algoritması şu şekilde; 100 öğrenci ve 100 tane anahtar var. 1. öğrenci gelerek bu anahtarların hepsini açıyor. 2. öğrenci gelerek 2. anahtardan başlayarak tüm anahtarları kapatıyor. 3. öğrenci ve sonraki tüm öğrenciler kaçıncı öğrenciyseler o sayının katlarında ki tüm anahtarları tersine çeviriyorlar(açıksa kapalı-kapalı ise açık). 100 öğrenci de işlemlerini yaptıktan sonra açık kalan anahtarların hangisi olduğunu bulacağız.
Ben bu algoritmayı bir yerden esinlenmeden yazdım. Bu sebeple daha az maliyetli algoritmalar olabilir. Hatta sonuç olarak yanlışta buluyor olabilirim.
Uygulama: Locker Puzzle Bulmacası
Amaç: Peşpeşe gelen sıralamalar algoritma mantığı
Dil: Java
Program: NetBeans
Kodlar:
public class LockerPuzzle { public static void main(String[] args) { int lockers[] = new int[101]; lockers[1] = 1;//2. Öğrenci 2den sonraki hepsini kapattı ve 1 açık kaldı int student,locker, open=0; //3. öğrenciden sonra tüm öğrenciler kendi atlarını tersine çeviriyor for(student=3; student<=100; student++) { for(locker = 3; (locker<=100) && (locker%student==0); locker++) { if(lockers[locker] == 1) lockers[locker]=0; else lockers[locker]=1; } } //Hangi locker lar açık System.out.println("Açık Sayısı\tKutu Numarası"); System.out.println("___________\t_____________"); for(int i=1; i<=100; i++) { if (lockers[i] == 1) { open++; System.out.printf("%2d\t-------\t%2d\n",open,i); } } System.out.println("Açık Kutu Sayısı = "+open+"\nblog.selcukoksuz.com\n"); } }
Kodlamada sorunlar varsa bilgilendirirseniz sevinirim. İyi çalışmalar dilerim.
Yorumunuz