回 帖 发 新 帖 刷新版面

主题:帮忙想个程序

n个人围成一圈报数,每个报到m的人离开,问最后剩下的人是n个人中的第几个?n和m从键盘输入
用C语言写程序
帮忙想下,谢谢
例如n=100,m=3,就是100人不断报数,报到3的离开,问最后剩下的是第几个

回复列表 (共3个回复)

沙发

假设 M=90 , 那么依次报数,最后小于90的数(人),就不会离开呀!
问题似乎有点不完善!

板凳

这是约瑟夫问题啊,我们数据结构与算法上机题中就有这道题,要用链表做的!要源码的话直接找我。

3 楼

 
#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:}
 

我来回复

您尚未登录,请登录后再回复。点此登录或注册