PAT (Basic Level) 1062 最简分数

题意

求两个分数之间的、最简的且分母为K的分数。

思路

先进行通分,判断之间的所有分数化为最简分数后分母是不是K。
坑点:

  1. 注意不能直接暴力地+1+1判过去,这样会T。
  2. 给定的两个分数可能后面小,前面大。
  3. 答案不包含两端点。

代码

#include <bits/stdc++.h>
using namespace std;
int main() {
	//ios::sync_with_stdio(false);
	//cin.tie(nullptr);
	//cout.tie(nullptr);
	int64_t n1, n2, m1, m2, k;
	scanf("%lld/%lld %lld/%lld %lld", &n1, &m1, &n2, &m2, &k);
	n1 *= k * m2;
	n2 *= k * m1;
	if (n1 > n2) swap(n1, n2);
	vector<int64_t> ans;
	int64_t jump = m1 * m2;
	for (int64_t i = n1 + (jump - n1 % jump); i < n2; i += jump) {
		if (__gcd(i, k * jump) == jump) {
			ans.push_back(i / jump);
		}
	}
	for (int i = 0; i < ans.size(); ++i) 
		printf("%lld/%lld%c", ans[i], k, (i == ans.size() - 1 ? '\n' : ' '));
	return 0;
} 

HINT

不定时更新更多题解,Basic Level 全部AC代码,详见 link ! ! !

发布了71 篇原创文章 · 获赞 15 · 访问量 3244

猜你喜欢

转载自blog.csdn.net/abcdefbrhdb/article/details/104638700