约瑟夫环
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了约瑟夫环相关的知识,希望对你有一定的参考价值。
Description
题目:n个数字(1,2,3…,n)形成一个圆圈,从数字1开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。
当一个数字删除后,从被删除数字的下一个继续删除第m个数字。
求出在这个圆圈中剩下的最后一个数字。
Input
输入:
n=9
m=5
Output
The last one is 8
Sample Input
9 5
Sample Output
8
数学方法:
#include <stdio.h> int main() { int i,n,m,l; scanf("%d %d",&n,&m); for(i=2,l=0;i<=n;i++) l=(l+m)%i; printf("%d\n",l+1); return 0; }
数组模拟:
#include<stdio.h> #include<string.h> int main() { int m,n,t[1000]={0}; int i,j,sum=0; scanf("%d%d",&m,&n); for(i=1,j=0;;i++) { if(!t[i]) { j++; if(j==n) { t[i]=1; j=0; sum++; } if(sum==m) { printf("%d",i); break; } } if(i==m) i=0; } return 0; }
以上是关于约瑟夫环的主要内容,如果未能解决你的问题,请参考以下文章