一个有点难度的题目
本帖最后由 旭日东升 于 2011-4-23 17:05 编辑20个人围成一个圈!依次编号1~20!然后从1号开始循环报数:1,2,3,1,2,3。。。。
凡是报到3的立即退出!剩下的人这样继续一直持续下去!
请问:最后一个出队列的编号是多少?
答案:20号!
有兴趣的朋友不妨试试:晚上再附上代码!
这核心好像还是Josephus问题。。。
循环队列可以做出来
本帖最后由 hevv 于 2011-3-22 14:28 编辑
这么经典的 题目
ai!居然没有人关注!看来大家喜欢吹水! 循环队列...... 你的答案写得好乱,大括号也不打,数组下标也漏了,而且直接不能编译 不是我的答案混乱!数组下标在这里编辑根本显示不出来!再说我的算出答案了,
至少在语法上没有错误了! 回复 4# 51641032
这都到了数据结构的知识了! 这么经典的 题目
ai!居然没有人关注!看来大家喜欢吹水!
hevv 发表于 2011-3-22 01:51 http://www.fishc.com/dz/images/common/back.gif
我关注了。。。 回复 1# hevv
哇。。。传说中的约瑟夫问题。。。感觉数据结构的书在讲到链表的时候都会讲到阿 谭浩强书上的答案
#include <stdio.h>
void main()
{
int i,k,m,n,num,*p;
printf("input the number of person:n=");
scanf("%d",&n);
p=num;
for(i=0;i<n;i++)
{
*(p+i)=i+1;
}
i=0;
k=0;
m=0;
while(m<n-1)
{
if(*(p+i)!=0) k++;
if(k==3)
{
*(p+i)=0;
k=0;
m++;
}
i++;
if(i==n)
i=0;
}
while(*p==0) p++;
printf("the last one is N0.%d\n",*p);
} 回复 10# zhangtpku
这下两个 语言的版本都有了! 还没看明白 #include<stdio.h>
#define max 100
int main(void)
{
int i,j,k,a;
int que = {0};
printf("请输入队列人数: ");
scanf("%d",&a);
for(i = 0;i < a;i++)
{
que = i + 1;
}
i = j = k = 0;
while(i < a - 1)
{
if(que[(j++)%a] != 0)
{
k++;
}
if(k == 3)
{
que[(j-1)%a] = 0;
k = 0;
i ++;
}
}
i = 0;
while(que == 0)
{
i++;
}
printf("最后剩下的号码是%d\n",que);
return 0;
} #include<stdio.h>
#define max 100
int main(void)
{
int i,j,k,a;
int que = {0};
printf("请输入队列人数: ");
scanf("%d",&a);
for(i = 0;i < a;i++)
{
que = i + 1;
}
i = j = k = 0;
while(i < a - 1)
{
if(que != 0)
{
k++;
}
if(k == 3)
{
que = 0;
k = 0;
i ++;
}
j ++;
}
i = 0;
while(que == 0)
{
i++;
}
printf("最后剩下的号码是%d\n",que);
return 0;
}
页:
[1]