Edit....:
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;
}