C配列猿選大王


猿が王を選ぶ
猿の群れが新しい猿王を選ぶ.新猿王の選び方は,N匹の候補猿を囲み,ある位置から順に1~N番とする.1番から数え始め、1番から3番になると、3番になったサルは輪を脱退し、隣の次のサルから同じ数え始めます.このように循環し続け、最後に残ったサルはサル王に選ばれた.サル王に選ばれたのは何番目ですか?入力フォーマット:1行に正の整数N(≦1000)を入力します.出力フォーマット:1行に選択した猿王の番号を出力します.入力サンプル:11出力サンプル:7
#include 
int main (void){
     
    int n,a[1001] = {
     0},d = 0,g = 0,b;    
    scanf("%d",&n);    
    for( b = 1;;b++){
             
      if(a[b] == 0)            
        d++;                
      if(d == 3){
                 
        a[b] = 1;//     1              
        d = 0;            
        g++;//g                 
      }        
      if(g == n - 1)        
        break;        
      if(b == n)            
      b = 0;        
     }    
    for(int p = 1;p <= n;p++){
             
      if(a[p] == 0){
                 
         printf("%d",p);            
         break;        
      }    
    }    
    return 0;
}