码迷,mamicode.com
首页 > 其他好文 > 详细

约瑟夫环

时间:2017-04-17 14:18:45      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:blog   sample   str   output   bsp   rip   约瑟夫   nbsp   数字   

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;
}

 

 



约瑟夫环

标签:blog   sample   str   output   bsp   rip   约瑟夫   nbsp   数字   

原文地址:http://www.cnblogs.com/ljhacm/p/6722463.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!