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;
}