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

  • 相关阅读:
    合并、媒体查询
    混入、命名空间(less)、继承
    函数(内置函数 和 自定义函数)
    运算、单位、转义、颜色
    选择器嵌套、伪类嵌套、属性嵌套(只在Sass中)
    注释、变量、插值、作用域
    二路归并排序java实现
    堆排序Java实现
    和为S的连续正数序列——牛客网(剑指offer)
    transient 与 volatile 笔记
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/6782863.html
Copyright © 2011-2022 走看看