zoukankan      html  css  js  c++  java
  • 解题报告

    题目:
    兔子的烦恼(二)
    题目链接: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
    解题体会:
    将详细问题抽象为数学模型。进而运用数学思想解决实际问题在编程中起着很关键的数据。

  • 相关阅读:
    VS2015预览版中的C#6.0 新功能(一)
    REST总结
    MVC和传统的以模板为中心的web架构比较
    实现两个select list box间item的移动和过滤
    异步编程
    简述System.Windows.Forms.Timer 与System.Timers.Timer用法区别
    C#导出EXCEL,并生成charts表
    CRC16位校验
    c# 后台GET、POST、PUT、DELETE传输发送json数据
    UDP通讯
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/6782863.html
Copyright © 2011-2022 走看看