如果它从左上角开始并且必须到达右上角,我无法检查台球桌上的球撞到墙壁的次数。
此代码为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;
}
答案 0 :(得分:5)
我对您的代码中的任何内容都不了解,但您不需要任何此类内容。这是众所周知的问题,并且有一个简单的公式(N / d + M / d) - 2
。 d = gcd(N, M)
。
您可以在此处阅读:http://www.jstor.org/stable/3618914?seq=1#page_scan_tab_contents
而且你的代码也错了。你自己写的吗?