新人求解一道C语言题。。。麻烦了

 有一百个人按编号排成一队,从1开始按123123报数,报3者退出,直到队尾,又从队尾向队首报数(1开始),依旧报3的退出,重复执行直至队列剩2个,求此2人的原始编号,这是题目,下面是我的程序。。。。求解。。



#include <stdio.h>

#include <stdlib.h>


/* run this program using the console pauser or add your own getch, system("pause") or input loop */


int main(int argc, char *argv[]) {

int people[100],i,j1,j2,t=0;

for(i=0;i<100;i++){

people[i]=1;

}

while(t<98){

  j1=0;

  if(j1<100){

   for(i=1;i<=(100-t);i++){

       if(people[j1]!=0){

        people[j1]=i;

        if(people[j1]%3==0){

        people[j1]=0;t++;

        }

        j1++;

 }

       else{

          i--;j1++;

 }

       

   }

  } 

   j2=99;

if(j2>=0){

for(i=1;i<=(100-t);i++){

if(people[j2]!=0){

people[j2]=i;

if(people[j2]%3==0){

people[j2]=0;t++;

}

j2--;

}

else{

i--;j2--;

}

}

  }

}

for(i=0;i<100;i++){

if(people[i]!=0){

printf("%d\n",i+1);

}

}

return 0;

}


l0598
浏览 1777回答 2
2回答

猫的脚步声

int who_win(char player[], int N){ int i; for(i=0; i<N; i++) player[i] = 0; // 初始为0:全部人员在线 int index = 0; // 从player[0]开始玩 int count = 0; // 报数 int kicked = 0;  // 出局的人的总数 while(1) { if(kicked == N - 1) break; // 若有N-1个人出局,则游戏结束 if(player[index] == 0) // 此人尚未出局, 则报数 { count ++;  // 报数1,2,3... if(count == 3) { player[index] = 1; // 标识此人出局 count = 0; kicked ++; printf("Player %d is kicked out!\n", index+1); } } index ++ ; // 下一位置 if(index >= N) index = 0; } // 找到剩下的那个人 for(i=0; i<N; i++) { if(player[i] == 0) return i; } return -1;}int main() { char people[100]; int win =who_win(people,100); printf("%d win!",win+1); return 0;}

DoDream

你的问题是什么?答案不对?
打开App,查看更多内容
随时随地看视频慕课网APP