Beynimi 2 Gündür Yorduğum C++ Sorusu [Yardım]
-
Hocalar merhaba.
Aklıma bi soru geldi ve onu yapmak istedim c++ dilini kullanarak.
Öncelikle belirteyim sadece for ve if kullanarak yapmak istiyorum. Yani Vector dizi goto kalıbı filan yok. Sadece saf algoritma kullanarak yapmak itiyorum. Asıl oyunu bozan kısımda bu zaten
Soru :
Bi insan varmış. İnsanında değişken bir sayıda kölesi var. Bu insan köleleri çember oluşturacak şekilde diziyor ve en baştaki kölesine bir kılıç veriyor.
Kılıcı alan köle yanındaki köleyi öldürüyor ve sonraki köleye kılıcı veriyor.
Sorunun basit hali :
10 köle var diyelim
1 2yi öldürdü kılıcı 3e verdi
3 4ü öldürdü kılıcı 5e verdi
5 6yi öldürdü kılıcı 7ye verdi
7 8 i öldürdü kılıcı 9a verdi
9 10u öldürdü kılıcı 1e verdi
1 3ü öldürdü kılıcı 5e verdi
5 7yi öldürdü kılıcı 9a verdi
9 1i öldürdü kılıcı 5e verdi
5 9u öldürdü Kılıç 5te Kaldı
Bunun formülünü bulmaya çalıştım beceremedim.
Yanlız şöyle bi ince nokta buldum. Kullanıcının girdiği sayı tek ise farklı çift ise farklı sonuç çıkıyor. (Doğal olarak öyle zaten ama bi başka anlamda farklı)
Direkt olarak kodu yazsanızda olur. Şöyle böyle yapsan çıkar desenizde olur :D Uykularım kaçıyor kaç gündür :D
GodKlaus tarafından 03/Nis/16 16:32 tarihinde düzenlenmiştir -
hayatta kalan köleleri mi bulmaya çalışıyosun anlamadım ?
çok basit geldi sorun yanlış anladım sanki
-
nurulmac11 bunu yazdı
hayatta kalan köleleri mi bulmaya çalışıyosun anlamadım ?
çok basit geldi sorun yanlış anladım sanki
Aynen hocam. Adamın 10 kölesi var.
Raund 1 sonunda hayatta kalanlar
raund 2 sonunda hayatta kalanlar
.
.
.
En son hayatta kalan köle.
Vectör yada dizi kullanmak istemiyorum, vektör kullanarak yaptım ama sadece sınırsız sayıda for ve if kullanarak yapmak istiyourm
-
GodKlaus bunu yazdınurulmac11 bunu yazdı
hayatta kalan köleleri mi bulmaya çalışıyosun anlamadım ?
çok basit geldi sorun yanlış anladım sanki
Aynen hocam. Adamın 10 kölesi var.
Raund 1 sonunda hayatta kalanlar
raund 2 sonunda hayatta kalanlar
.
.
.
En son hayatta kalan köle.
Vectör yada dizi kullanmak istemiyorum, vektör kullanarak yaptım ama sadece sınırsız sayıda for ve if kullanarak yapmak istiyourm
hacı diziler olmadan her mahkum için bir değişken yaratıp yapman lazım, çünkü mahkumların ölü yada canlı olduğunu tutacak bişey gerek
şöyle bişey olur o zaman
int kilic_kimde = 1 // kilic kacinci mahkumda. baslarken ilk mahkuma verelim int mahkumsayisi; int mahkum1 = 1, mahkum2 = 1, .... // kac mahkum varsa. eger 1 se canli, 0 sa olu olsunlar for(int i = 0;i < mahkumsayisi;i += 2){ i+1'inci mahkumu oldur kilic_kimde = i; }c
-
Hocam vektor dedigin sey zaten teorikte bir oncesini bir sonrasini bilen bir veri yapisi. Her koleyi bir oncesine ve sonrasina bir sekilde baglaman gerek.
Soyle yapabilirsin. Bir tane kole arrayin olur. (Kole numaralari gibi dusun)
Bir tane yasiyor yasamiyor Arrayin olur (Kole arrayi ile ayni boyutta, kole yasarken degeri 1 yasamiyorsa 0)
En son bir de kilicin oldugu kolenin indexini tutan bir degiskenin olur. Bu sekilde rahat rahat cozersin problemi.
Simdi baktim array de kullanmayayim demissin de, array yerine upuzun bir sayi dizisi de kurabilirsin. Ama olayi saf algoritma ile falan cozmus olmuyorsu yani. Bildigin amelelik bu :D
-
NmC bunu yazdı
Hocam vektor dedigin sey zaten teorikte bir oncesini bir sonrasini bilen bir veri yapisi. Her koleyi bir oncesine ve sonrasina bir sekilde baglaman gerek.
Soyle yapabilirsin. Bir tane kole arrayin olur. (Kole numaralari gibi dusun)
Bir tane yasiyor yasamiyor Arrayin olur (Kole arrayi ile ayni boyutta, kole yasarken degeri 1 yasamiyorsa 0)
En son bir de kilicin oldugu kolenin indexini tutan bir degiskenin olur. Bu sekilde rahat rahat cozersin problemi.
Simdi baktim array de kullanmayayim demissin de, array yerine upuzun bir sayi dizisi de kurabilirsin. Ama olayi saf algoritma ile falan cozmus olmuyorsu yani. Bildigin amelelik bu :D
hocam dizi ve vektör kullanmak istemiyorum :)
Elimde bir değişken olacak. bu değişken her raund belli bir katsayı ile çarpılacak. Buradaki katsayıyı bulamıyorum.
en aşağı 5 6 sayfa formül yazdım. onlarca değer tutuyor ancak bir değer tutmuyor xD
-
GodKlaus bunu yazdıNmC bunu yazdı
Hocam vektor dedigin sey zaten teorikte bir oncesini bir sonrasini bilen bir veri yapisi. Her koleyi bir oncesine ve sonrasina bir sekilde baglaman gerek.
Soyle yapabilirsin. Bir tane kole arrayin olur. (Kole numaralari gibi dusun)
Bir tane yasiyor yasamiyor Arrayin olur (Kole arrayi ile ayni boyutta, kole yasarken degeri 1 yasamiyorsa 0)
En son bir de kilicin oldugu kolenin indexini tutan bir degiskenin olur. Bu sekilde rahat rahat cozersin problemi.
Simdi baktim array de kullanmayayim demissin de, array yerine upuzun bir sayi dizisi de kurabilirsin. Ama olayi saf algoritma ile falan cozmus olmuyorsu yani. Bildigin amelelik bu :D
hocam dizi ve vektör kullanmak istemiyorum :)
Elimde bir değişken olacak. bu değişken her raund belli bir katsayı ile çarpılacak. Buradaki katsayıyı bulamıyorum.
en aşağı 5 6 sayfa formül yazdım. onlarca değer tutuyor ancak bir değer tutmuyor xD
ne yaparsan yap kolelerin yasayıp yaşamadığını tutacak bir yere ihtiyacın var, bunun için arraye ihtiyacın olacak. yada benzer bi yapıyı kendin oluşturacaksın
-
Kim sordu bilmiyorum ama josephus probleminden yola çıkmış belli. Zamanında javayla birkaç yoldan yazmıştım, şu an işim başımdan aşkın şu kaynakları incelersen çözebilirsin:
http://mathworld.wolfram.com/JosephusProblem.html
https://murattezgider.wordpress.com/tag/javada-flavius-josephus-probleminin-cozumu/
http://www.cplusplus.com/forum/beginner/113281/
bir ve ikinciden problemi anla diğer linkte tartışmışlar ordan esinlen ve çöz.
Ayrıca algoritma mevzularına ilgin varsa codeforces sitesine gel derim geliştirirsin kendini.
-
GodKlaus bunu yazdıNmC bunu yazdı
Hocam vektor dedigin sey zaten teorikte bir oncesini bir sonrasini bilen bir veri yapisi. Her koleyi bir oncesine ve sonrasina bir sekilde baglaman gerek.
Soyle yapabilirsin. Bir tane kole arrayin olur. (Kole numaralari gibi dusun)
Bir tane yasiyor yasamiyor Arrayin olur (Kole arrayi ile ayni boyutta, kole yasarken degeri 1 yasamiyorsa 0)
En son bir de kilicin oldugu kolenin indexini tutan bir degiskenin olur. Bu sekilde rahat rahat cozersin problemi.
Simdi baktim array de kullanmayayim demissin de, array yerine upuzun bir sayi dizisi de kurabilirsin. Ama olayi saf algoritma ile falan cozmus olmuyorsu yani. Bildigin amelelik bu :D
hocam dizi ve vektör kullanmak istemiyorum :)
Elimde bir değişken olacak. bu değişken her raund belli bir katsayı ile çarpılacak. Buradaki katsayıyı bulamıyorum.
en aşağı 5 6 sayfa formül yazdım. onlarca değer tutuyor ancak bir değer tutmuyor xD
Jeton simdi dustu :) Formulize etmeye calisiyorsun olayi. Aksam musait olursam kalemi kagidi alip bir bakayim :)
-
Konu ile ilgili Prof. Dr. Vasif Vagifoğlı NABIYEV in algoritmalar kitabında geçen kısımlarının fotoğrafını çektim
https://www.dropbox.com/sh/3hpakaji0y4tsfm/AAAXP0HiQ0xrm2A0pmOP4lOVa?dl=0 -
#include<iostream> using namespace std; class Slave { public: int value; Slave* next; Slave* killNext(); }; Slave* Slave::killNext(){ Slave* a = next; next = next->next; return a; } int main(){ int number; cout << "How many slave ? \n"; cin >> number; Slave *head = new Slave(); head->value = 1; head->next = head; Slave *cur = head; for(int i = 2 ; i<=number;i++){ Slave *newS = new Slave(); newS->value = i; newS->next = cur->next; cur->next = newS; cur = newS; } cur = head; for(int i = 1;i<number;i++){ Slave *k = cur->killNext(); cout << cur->value << " " << k->value << " 'u oldurdu ve kilici " << cur->next->value << " ya verdi \n"; cur = cur->next; } return 0; }
ilgimi çekti yazmaya çalıştım algoritmik olarak elbet daha verimli bişeyler yazılır ama buyrun belki işinize yarar hocam