zoukankan      html  css  js  c++  java
  • 绕圆圈取球

    题目描述:小明报名参加了趣味运动会,运动会游戏规则如下:在一个环形跑道上,等距离放置着 N 个小球,小球按照顺时针方向从起点开始依次编号为 1 到 N ,在最短时间内取走放在跑道上尽可能多小球的选手获胜。举办方要求每个选手只能按照顺时针方向,跳过 M-1 个号码取后走下一个小球。如当 N=5 、 M=3 时,小明能够取走所有的小球,取走的顺序依次为 1->4->2->5->3 。当 N=6 、 M=2 时,小明只能取走 3 个小球 1->3->5 。小明想知道在一场比赛中他最多能取走多少小球,当然,小明是知道怎么做的,但是他忙着补作业,所以这个简单的问题就交 (shuai guo) 给你了。

    输入数据

    输入数据的第一行为一个整数 T ,表示有 T 组测试样例。每组样例为单独的一行,包括两个整数 N 和 M 。

    输出数据

    对每一组输入数据,输出一行结果 ”Case #id: M” ,表示第 id 组数据的结果是 M , id 从 1 开始。

    样例输入

    3
    5 3
    6 2
    10 6

    样例输出

    Case #1: 5
    Case #2: 3
    Case #3: 5

    通过枚举几组数据发现了此题的规律:  当N与M互质时,可以把球都取走;当N与M不互质时,把它们中最大的数除以它们的gcd最大公约数,所得结果即最多可以取走的球数。

    使用辗转相除法计算他们的最大公约数:

    /* 如果b等于0,a就是最大公约数;
    否则,计算a除以b的余数,并让a等于b,而b等于那个余数;
    回到第一步。

    如:
    a b t
    12 18 12
    18 12 6
    12 6 0
    6 0
    */


    int
    gcd(int a, int b) { if (b == 0) return a; else return gcd(b, a%b); }

    全部代码示例:

     1 #include<iostream>    
     2 using namespace std;
     3 
     4 struct arg {
     5     int N;
     6     int M;
     7 };
     8 
     9 int gcd(int a, int b)
    10 {
    11     if (b == 0)
    12         return a;
    13     else
    14         return gcd(b, a%b);
    15 }
    16 
    17 int function(int N, int M)
    18 {
    19     int gcd1 = gcd(N, M);
    20     if (gcd1 == 1)
    21         return N;
    22     else
    23     {
    24         N = int(N / gcd1);
    25         return N;
    26     }
    27     return 0;
    28 }
    29 
    30 int main()
    31 {
    32     int i, n;
    33     cin >> n;
    34     arg *a = new arg[n+1];   // 动态分配结构体数组,节省内存
    35     
    36     for (i = 1; i <=n ;++i) {
    37         cin >> a[i].N >> a[i].M;
    38     }
    39 
    40     for (i = 1; i <= n; ++i) {
    41         cout << "Case #" << i << ": " << function(a[i].N,a[i].M) << endl;
    42     }
    43     return 0;
    44 }
  • 相关阅读:
    Leetcode 121. Best Time to Buy and Sell Stock
    Leetcode 120. Triangle
    Leetcode 26. Remove Duplicates from Sorted Array
    Leetcode 767. Reorganize String
    Leetcode 6. ZigZag Conversion
    KMP HDU 1686 Oulipo
    多重背包 HDU 2844 Coins
    Line belt 三分嵌套
    三分板子 zoj 3203
    二分板子 poj 3122 pie
  • 原文地址:https://www.cnblogs.com/ll-10/p/9351044.html
Copyright © 2011-2022 走看看