代码转载自:https://github.com/aoapc-book/aoapc-bac2nd/blob/master/ch7/UVa10976.cpp
题目
首先
哇,看了作者的源码我才终于懂了咋写。。。
我竟然没想到有y的具体范围了,还知道了k,那不就就可以直接求x了
我竟然还想枚举x
我竟然还根据输入的最大值给x定了个上限1e9。。。
我竟然还不知道判断分数是否为整数,直接判断能否整除就行了
我竟然想把那些输出先sprintf()保存到字符数组里,保存x、y的值不就好了
我竟然…
好了,没了,哈哈哈哈哈哈哈哈哈哈,太年轻啊,加油啊,学
代码(自己模仿着手敲了一遍)
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
int main() {
int k;
vector <int> X,Y;
while (cin >> k && k) {
int count = 0;
for (int y = k+1; y <= 2*k; y++) {
if (k*y % (y-k) == 0) { //判断x是否为整数,即能否整除
count++;
X.push_back(k*y / (y-k));
Y.push_back(y);
}
}
cout << count << endl;
for (int i = 0; i < X.size(); i++) {
printf("1/%d = 1/%d + 1/%d\n", k, X[i], Y[i]);
}
X.clear();
Y.clear();
}
return 0;
}