- UID
- 153
- 帖子
- 2398
- 积分
- 34637
- 阅读权限
- 80
- 注册时间
- 2005-7-9
- 最后登录
- 2015-6-19
- 在线时间
- 6842 小时
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXNUM 100
/*
#define MAXNUM 9
Total Number of Soilders
*/
void main(void)
{
int i,j,k=0,d;
char p[MAXNUM]={0};//初始化都为0,代表都没报数
for(i=0;i<MAXNUM;i++)
{
for(j=0;j<7;j++)
{//循环7次,最后k就是报7的士兵编号-1(0based)
do
{
++k%=MAXNUM;
}
while(p[k]==1);
}
p[k]++; //p[n]=0代表没报数,p[n]=1代表已经报数
}
d=k; //以第一个士兵报1开始,第一轮运算找出最后的士兵编号,存为d
memset(p,0,100); //重新把p归零
//第二轮运算,让最后一个报数编号为1:(k-d+1+MAXNUM)%MAXNUM
for(i=0,k=0;i<MAXNUM;i++)
{
for(j=0;j<7;j++)
{
do
{
++k%=MAXNUM;
}
while(p[k]==1);
}
p[k]++;
//第二轮运算,按报数顺序输出
printf("%d\n",(k-d+1+MAXNUM)%MAXNUM);
}
} |
|