报数出列

yaodie_com 2008-04-10 12:54:13
设有10个人围成一圈,从开始顺序编号。从第一个人开始报数,
从1到3,凡是报3的人出圈,问最后出圈的人是原来的几号?


请教一下要怎么实现
...全文
125 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
baihacker 2008-04-10
  • 打赏
  • 举报
回复
约瑟夫环问题

http://www.google.cn/search?hl=zh-CN&q=%E7%BA%A6%E7%91%9F%E5%A4%AB%E7%8E%AF%E9%97%AE%E9%A2%98&btnG=Google+%E6%90%9C%E7%B4%A2&meta=&aq=f
独孤过儿 2008-04-10
  • 打赏
  • 举报
回复
Joesphus问题...自己google去...
world007 2008-04-10
  • 打赏
  • 举报
回复
一个比较直接的做法是:
#include <stdio.h>
#define Max 10
int main()
{
int a[Max],i,flag,num;
for(i=0;i<Max;i++)
a[i]=i+1;
flag=Max;
i=0;
num=0;
while(1)
{
if(a[i]!=0)
{
if(flag==1)
{
printf("%d\n",i+1);
break;
}
num++;
if(num%3==0) {a[i]=0;flag--;num=0;}
}
i++;
if(i>9) i=0;

}
getch();
}
qmm161 2008-04-10
  • 打赏
  • 举报
回复
明显是用循环链表!
liyuzhu_1984 2008-04-10
  • 打赏
  • 举报
回复
这个是个比较经典的问题 它的名字叫约瑟夫环 你可以到网上搜索约瑟夫环

有两种实现方法

一个是用双向联表构成一个联表环

另外一种方法是用数组实现
yashiro_ 2008-04-10
  • 打赏
  • 举报
回复
试过了,应该没问题。


#include <iostream>

using namespace std;

void main()
{
int iarray[10] = {0};
int icount = 10;
int iflag = 1;
int i = 0;

while ( 1 != icount )
{
if ( iflag % 3 == 0)
{
iflag = 0;
iarray [i] = 1;

icount = 0;
for (int j = 0; j < 10; j++)
if ( 0 == iarray[j] )
icount++;
}

i++;
if ( 10 == i )
i = 0;
if ( 0 == iarray[i] )
iflag++;
}

for (int j = 0; j < 10; j++)
if ( 0 == iarray[j] )
cout<< j+1 << endl;
}#include <iostream>

using namespace std;

void main()
{
int iarray[10] = {0};
int icount = 10;
int iflag = 1;
int i = 0;

while ( 1 != icount )
{
if ( iflag % 3 == 0)
{
iflag = 0;
iarray [i] = 1;

icount = 0;
for (int j = 0; j < 10; j++)
if ( 0 == iarray[j] )
icount++;
}

i++;
if ( 10 == i )
i = 0;
if ( 0 == iarray[i] )
iflag++;
}

for (int j = 0; j < 10; j++)
if ( 0 == iarray[j] )
cout<< j+1 << endl;
}
nick111000 2008-04-10
  • 打赏
  • 举报
回复
jf
lala_benben 2008-04-10
  • 打赏
  • 举报
回复
设计成一个循环链表,报到3的人从链表中删除

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧