• 解题报告


    题目:
    兔子的烦恼(二)
    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=317
    题目大意:
    在一座山上有n个山洞(每一个洞从0~n-1分别编号)。这山上有一仅仅兔子躲在山洞里,有一仅仅狼,从编号为0的山洞開始入洞,每隔m-1个洞。再次入洞抓兔子,如今兔子想知道是否有能避免这场灾难的山洞?
    比如:m=2 and n=6, 狼将要进入的山洞号为:0,2,4。可避难的山洞为:1,3,5;
    解题思路:
    对于n与m的最大公约数的倍数,经过多次循环狼都能遍訪到
    难点具体解释:
    令t=GCD(n,m)
    则: 0t, 1t, 2t, 3t ,........kt [kt<n] 都不是安全的洞,总共同拥有k+1个;
    ==>> k=(n-1)/t;
    ==>> 兔子可躲避的洞穴个数N = n-k-1 = (n-1)-(n-1)/t;
    又: n一定能整除 t ,n-1一定不能被 t 整除 [当t 不等于 1时],
    所以: (n-1)/t==n/t-1;
    则: n-1-(n-1)/t == n - n/t;
    关键点:
    由n、m的最大公约数的值推断兔子是否能躲避这场灾难。
    附加代码:
    #include<stdio.h>
    int GCD(int n,int m)
    {
    return m?

    GCD(m,n%m):n;
    }
    int main()
    {
    int n,m,i;
    while(~scanf("%d%d",&m,&n))
    {
    if(GCD(n,m)==1)
    {
    printf("NO ");
    }
    else
    {
    int t=GCD(n,m);
    printf("%d",n-n/t);
    for(i=1;i<n;++i) //第0个洞一定会经过,所以i从1開始
    if(i%t!=0)
    printf(" %d",i);
    printf(" ");
    }
    }
    return 0;
    }
    解题时间:
    2014-09-20 17:36
    解题体会:
    将详细问题抽象为数学模型。进而运用数学思想解决实际问题在编程中起着很关键的数据。

  • 相关阅读:
    bzoj 4012: [HNOI2015]开店
    POJ 1054 The Troublesome Frog
    POJ 3171 Cleaning Shifts
    POJ 3411 Paid Roads
    POJ 3045 Cow Acrobats
    POJ 1742 Coins
    POJ 3181 Dollar Dayz
    POJ 3040 Allowance
    POJ 3666 Making the Grade
    洛谷 P3657 [USACO17FEB]Why Did the Cow Cross the Road II P
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/6782863.html
Copyright © 2020-2023  润新知