主题:帮忙想个程序
huang654360313
[专家分:0] 发布于 2010-01-02 19:53:00
n个人围成一圈报数,每个报到m的人离开,问最后剩下的人是n个人中的第几个?n和m从键盘输入
用C语言写程序
帮忙想下,谢谢
例如n=100,m=3,就是100人不断报数,报到3的离开,问最后剩下的是第几个
回复列表 (共3个回复)
沙发
miaoyong [专家分:760] 发布于 2010-01-04 10:57:00
假设 M=90 , 那么依次报数,最后小于90的数(人),就不会离开呀!
问题似乎有点不完善!
板凳
livewithJC++ [专家分:0] 发布于 2010-01-06 13:30:00
这是约瑟夫问题啊,我们数据结构与算法上机题中就有这道题,要用链表做的!要源码的话直接找我。
3 楼
zt4445253 [专家分:0] 发布于 2010-01-18 20:53:00
#include <stdio.h>
void main()
{int i,j=0,p,m,n;
int a[100];
for(i=0;i<100;i++){a[i]=0;}
printf("you ji ge ren"); /*有几个人/
scanf("%d",&m);
printf("bao ji li kai"); /*报几的离开/
scanf("%d",&n);
for(i=0;i<m;i++){a[i]=i+1;}
p=m;
while(p>1)
{for(i=0;i<m;i++)
{while(a[i]!=0){j++;break;}
if((j%n)==0&&a[i]!=0){a[i]=0;p--;}
if(j==n) j=0;
}
}
while(p==1)
{for(i=0;i<m;i++)
{if(a[i]!=0){printf("%d",a[i]);goto l1;}}
}
l1:}
我来回复