| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1290 人关注过本帖
标题:是一个题!请大家讲下思路或者讲解代码!!谢谢。
只看楼主 加入收藏
雪山的猫
Rank: 1
等 级:新手上路
帖 子:44
专家分:5
注 册:2012-12-23
结帖率:95.24%
收藏
已结贴  问题点数:4 回复次数:5 
是一个题!请大家讲下思路或者讲解代码!!谢谢。
有一只狡猾的老鼠,在一个环形的田埂上挖了n个老鼠洞,这些洞也是连接为一个环状,我们要用泥土填满这些鼠洞,老鼠从第0号洞开始出现(第0号洞不填),然后依次按每间隔m个洞出现一次。我们要跟在老鼠后面,当老鼠出现后填补上刚刚出现的洞。我们需要计算出老鼠最后出现那个洞(即剩下最后一个洞没有被我们填上时,这个洞的序号)。
Input
输入的第一行为了两个整数n(n<=300000)、m,n表示一共有n个老鼠洞,m表示老鼠每隔m个洞出现。
Output
输出老鼠最后出现的那个洞的序号。
Sample Input 5 2
Sample Output 3
Hint填洞顺序:2,4,1,0
(我是想不到思路,于是求人家的代码看看啊!但是百度到了的又没解释,所以请大家说说思路或者讲下下面的代码谢谢!!(思路的话我开始时想i循环当i==m时,就赋值i=0再次循环。但对于n对应的元素的去除我是无法办到)}
#include<stdio.h>
int main()
{
    int a,b,c=0;
    scanf("%d%d",&a,&b);
    for(int i=2;i<=a;i++)
    {
        c=(c+b)%i;
    }
    printf("%d\n",c+1);
    return 0;
}(这是代码谢谢!!!)
搜索更多相关主题的帖子: 老鼠洞 
2013-04-28 18:16
Explorerlxz
Rank: 9Rank: 9Rank: 9
来 自:zzu
等 级:蜘蛛侠
威 望:4
帖 子:302
专家分:1032
注 册:2013-4-24
收藏
得分:0 
定义一个大小为300000的数组,前n个元素定义成0,后面的全为1,然后从第一个元素开始往后数,每逢m个非1元素就把下一个元素设置成1,再循环,循环到300000时再开始循环,知道只剩下一个0元素,返回这个元素在数组中的位置就可以了!
2013-04-28 19:18
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:3 
说了那么多,还不是一个约瑟夫问题。。。

http://baike.baidu.com/view/717633.htm

百度有详细解释


[fly]存在即是合理[/fly]
2013-04-28 20:03
Explorerlxz
Rank: 9Rank: 9Rank: 9
来 自:zzu
等 级:蜘蛛侠
威 望:4
帖 子:302
专家分:1032
注 册:2013-4-24
收藏
得分:1 
我大致按照自己的思路写了一个,大家看看对不对,我不会设置300000位的数组。还有一点我不明白,楼主说从0号坑开始,且0号坑可以不填是什么意思?加0号坑总共有n个还是除0号坑外还有n个,这涉及到输出结果,虽然对算法来说不怎么重要,但希望楼主解释一下?我的是从1号坑到n号坑。
#include<stdio.h>
#define N 30000
int main()
{
    int a[N],n,m,i,j,flag;
    printf("please input n and m:");
    scanf("%d,%d",&n,&m);
    for(i=0;i<n;i++)
        a[i]=0;
    flag=n,j=0;
    while(flag!=1)
    {
        for(i=0;i<n;i++)
        {
            if(a[i]==0) j++;
            if(j==m)
            {
                a[i]=1;
                printf("%d\t",i+1);
                flag--;
                j=0;
            }
        }
    }
    printf("\n");
    for(i=0;i<n;i++)
    if(a[i]==0)
    printf("the last one is %d",i+1);
    getch();
    return 0;
}
2013-04-28 20:38
雪山的猫
Rank: 1
等 级:新手上路
帖 子:44
专家分:5
注 册:2012-12-23
收藏
得分:0 
回复 4楼 Explorerlxz
0号是第一个数组元素数组!5选2的话就是0 1 2 3 4(过滤2 0 3 1 )
2013-04-29 09:24
雪山的猫
Rank: 1
等 级:新手上路
帖 子:44
专家分:5
注 册:2012-12-23
收藏
得分:0 
回复 3楼 azzbcc
击中要点!!约瑟夫环的问题我百度百科看了,,谢谢你。一下就明了了。
2013-04-29 09:51
快速回复:是一个题!请大家讲下思路或者讲解代码!!谢谢。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016958 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved