为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
l0598 2015-11-05 23:21:24
 有一百个人按编号排成一队,从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;}
查看完整描述

2 回答

?
猫的脚步声

TA贡献1条经验 获得超0个赞

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;

}


查看完整回答
反对 回复 2015-11-06
?
DoDream

TA贡献28条经验 获得超3个赞

你的问题是什么?答案不对?

查看完整回答
反对 回复 2015-11-06
  • 2 回答
  • 0 关注
  • 1776 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信