您的位置:首页 > 其它

约瑟夫问题简单求解

2015-06-30 21:19 337 查看
约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将退出,再从下一个从1开始报数,第M个退出,最后剩下一个,求最后一个人的编号。

i个人和

i-1个人同解,它们解的关系满足f[i]=(f[i-1]+m%i)%i,且f[1]=0,所以最后一个人的编号为f
+1

#include<stdio.h>

int main(){
int n,m;
printf("请输入n和m:");
scanf("%d%d",&n,&m);
int f=0;
for(int i=2;i<=n;i++)
f=(f+m%i)%i;
printf("最后一个人的编号是%d",f+1);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: