直接枚举就行了,但是要注意将浮点数的计算转换成为整数的计算,这样就可以避免因为精度问题造成部分正确结果得不到输出,具体实现见如下源代码:
#include<iostream> #include<vector> #include<string> #include<set> #include<stack> #include<queue> #include<map> #include<algorithm> #include<cmath> #include<iomanip> #include<cstring> #include<sstream> #include<cstdio> #include<deque> using namespace std; int k; int x, y; bool compare(pair<int,int> a,pair<int,int> b){ if (a.first != b.first) return a.first > b.first; return a.second < b.second; } int main(){ while (cin >> k){ vector<pair<int, int>> res; y = 1; while (y <= 2 * k){ if ((y-k>0)&&((k*y) % (y - k)) == 0){ x = (k*y) / (y - k); if (x < y) break; res.push_back(make_pair(x,y)); } y++; } cout << res.size() << endl; sort(res.begin(), res.end(), compare); for (int i = 0; i < res.size(); i++){ cout << "1/" << k << " = " << "1/" << res[i].first << " + 1/" << res[i].second << endl; } } return 0; }