台球 - 球撞到墙上的次数

时间:2015-08-15 19:43:02

标签: c++ algorithm

如果它从左上角开始并且必须到达右上角,我无法检查台球桌上的球撞到墙壁的次数。

此代码为N,M > 1000提供了大数字错误。有没有办法优化它?

#include <iostream>
#include <queue>
#include <cstring>
#include <sstream>
#define MAXN 101
using namespace std;


int main() {

    int m, n, k = 0; cin >> m >> n;
    int x = 0, f =0;

    while(1) {
        x += n;

        if(x == m) {
            break;
        }
        if(x > m) {
            x -= (x-m);
            f = 1;
        }
        k += 1;
    }
    cout << k << endl;

}

1 个答案:

答案 0 :(得分:5)

我对您的代码中的任何内容都不了解,但您不需要任何此类内容。这是众所周知的问题,并且有一个简单的公式(N / d + M / d) - 2d = gcd(N, M)

您可以在此处阅读:http://www.jstor.org/stable/3618914?seq=1#page_scan_tab_contents

而且你的代码也错了。你自己写的吗?