Yıllar önce bir kral 21 tane mahkum içerisinden ikisini affetmeye karar verir.
Mahkumlar dairesel şekilde dizilmektedir.Ve her birine 1 kılıç veriliyor.Birinci kişiden başlayarak her seferinde iki kişi atlayıp üçüncü kişi dördüncü kişiyi öldürüyor.Tekrar iki kişi atlayıp yedinci sekizinciyi öldürüyor Sonra kalan iki kişi kurtuluyor onu bulunuz..
Bu sorunun bir çok yöntemi varmış..
Hocanın istediği While döngüsü ile cevap yapılıcakmış..
Güveniyorum size r10 =)=)
C++ While döngüsü ile ilgili bir beyin fırtınası sorusu.. (Ödev)
7
●1.629
- 28-12-2010, 21:28:11Teşekkürler çok sevinirim.. =)MaxidaTa adlı üyeden alıntı: mesajı görüntüle
- 28-12-2010, 21:57:13Edit....:
soru bu sandım ama yanlış okumuşum yinede fikir verebilir...
http://www.frmtr.com/c-ve-c/877604-c...ml#post9049960
#include<stdio.h> #include<conio.h> main() { int A[21]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; //Mahkumların hepsine 1 degeri verdim,yaşadıklarını belirtmek için. int i,j,n,sayac,x; i=0; // 1. mahkumdan başlandığı için i=0 başlangıç değeri verdim. while(1) { sayac=0;x=0;n=i+1; while(1){ if(n>20) n=0; if(A[n]==1) sayac++; //Hayatta olan mahkumdan sonraki hayatta olan ilk iki mahkumu bulmak icin, if(sayac==2) break; //sonsuz döngü açtım,bu ilk iki mahkumdan ikincisine ulaştığımda döngüyü kırdım, n++; //çünkü ölücek olan ikinci mahkum olacak, } A[n]=0;//döngüyü kırdıktan sonra o makuma 0 değeri vererek öldürdüm. while(1) { n++; //öldürdüğüm mahkumdan sonra gelen ilk hayattaki mahkumu bulmak için, if(n>20) n=0; //yine sonsuz bir döngü açtım,çünkü bi yerden sonra ölü mahkumdan sonra gelen, if(A[n]==1) {i=n;break;} // mahkumda ölü olabilir,yani 18.=0,19.=0 olabilirdi. } for(j=0;j<21;j++) { if(A[j]==1) x++;} // for döngüsüyle hayatta kalan tek 1 kişi olup olmadığını kontrol ettim, if(x==1) break; //eğer 1 kişi kalmışsa en baştaki sonsuz döngüyü kırıp çıktım.. } for(j=0;j<21;j++) {if(A[j]==1) { printf("%d",j+1);break;} // son olarak hayatta olan kişiyi indis numarısıyla buldum.. //indis numarasını 1 arttırım çünkü A[0] 1. kişiyi temsil ediyo aslında. } getch();return 0; } - 28-12-2010, 22:57:59Walla hiç bilmiyorum ki =) O yüzden sizlerden sizden yardım ettim..XEJDER adlı üyeden alıntı: mesajı görüntüle
İlginiz için teşekkürler..kafilem adlı üyeden alıntı: mesajı görüntüle
Bu soruyu çözebilirsek çok iyi olucak.. - 28-12-2010, 23:25:27mahkum yerine asker demisim sonradan farkettim ama düzeltmedim işine yarar umarım
int asker_sayisi = 21; int asker = 0; int askerler[21]; for(int i=0;i<asker_sayisi;++i) askerler[i] = 1; while( asker_sayisi>2 ) { for(int i=0;i<3;++i) { asker = ((asker + 1)%21); if(askerler[asker]==0) --i; } askerler[asker] = 0; asker_sayisi--; asker = (asker + 1)%21; } cout<<"Kalanlar:"<<endl; for( int i=0;i<21;++i) { if(askerler[i]) cout<<i+1<<". asker"<<endl; }
şaka bir yana akşam eve geçince uğraşıp yardımcı olmaya çalışacağım.
