程序员试题
8 个士兵围成一圈,给他们依次编号,班长指定从第5个士兵开始报数,报到到第m个士兵就出列,依次重复下去,直至所有的士兵都出列,试求所有的士兵出列顺序。
5月20日参加程序员考试的请加群:18530525
问题点数:15、回复次数:9Top
1 楼xiaocai0001(高楼目尽欲黄昏/梧桐叶上萧萧雨)回复于 2006-03-05 13:55:16 得分 0
又是一个约瑟夫环的问题Top
2 楼wucunfu(因为楼主你吝啬,所以我还是一个三角裤衩!)回复于 2006-03-05 22:19:31 得分 0
约瑟夫环的问题
怎么没人解啊?Top
3 楼arden1019(CSCUM)回复于 2006-03-06 10:36:04 得分 0
自己googleTop
4 楼abblly(西边日出东边雨)回复于 2006-03-06 11:06:59 得分 7
#include <iostream>
using namespace std;
const int NUMBER=10;
const int S=3;
void main()
{
int arr[NUMBER];
int count=0;
int flag=0;
for (int i=0; i<NUMBER; i++)
{
arr[i] = 1;
}
while (true)
{
for(int j=0; j<NUMBER; j++)
{
if (arr[j]==1)
{
flag++;
}
if ((flag%3==0)&& (flag!=0))
{
arr[j] = 0;
flag = 0;
count++;
}
}
if (count==NUMBER-1)
break;
}
for (int k=0; k<NUMBER; k++)
{
if (arr[k]==1)
cout<<"the last one is:"<<k+1<<endl;
}
}
10个人,从第一个开始,数到3出列Top
5 楼ra_zy()回复于 2006-03-10 15:08:18 得分 0
markTop
6 楼ra_zy()回复于 2006-03-10 15:09:09 得分 5
感觉
for(int j=0; j<NUMBER; j++)
{
if (arr[j]==1)
{
flag++;
}
if ((flag%3==0)&& (flag!=0))
{
arr[j] = 0;
flag = 0;
count++;
}
}
应该改成while(1)循环Top
7 楼SK_MadFrog(平凡但不平庸的人)回复于 2006-03-10 16:27:27 得分 3
abblly(西边日出东边雨) :
你的程序能得到正确结果,但出列序列(即下一个该是哪个人出列)有点问题,....
我编译的结果差一个数字,Top
8 楼systemx(-操!老子从不讲脏话的!阿弥陀佛!-)回复于 2006-03-10 16:45:58 得分 0
约瑟夫环~~~Top
9 楼wangmuqq88(挥着翅膀的尼姑)回复于 2006-03-12 00:45:55 得分 0
欢迎加群20641933,欢迎大家共同交流.提高!(不怕不会,就怕不学.)Top




