uva 654 - Ratio(暴力)

题目链接:uva 654 - Ratio


题目大意:给出a和b,找出一个序列,要求分母i由1到b,分子u是所有可能的分子中u/i最接近a/b的,然后将中的一些项删除,保证所u/i是越来越接近a/b的。


解题思路:暴力枚举分母i,分子u = i * a /b(四舍五入),然后维护一个标准,保证是接近的。


#include <stdio.h>
#include <math.h>

const double INF = 0x3f3f3f;

bool cmp(double a, double b) {
	return a - b < 0;
}

int main() {
	int a, b, cas = 0;
	while (scanf("%d%d", &a, &b) == 2) {
		if (cas++) printf("\n");

		double p = 1.0 * a / b, tmp = INF;
		for (int i = 1; i <= b; i++) {
			int u = (int) i * p + 0.5;
			if(cmp(fabs(1.0*u/i - p), tmp)) {
				tmp = fabs(1.0*u/i - p);
				printf("%d/%d\n", u, i);
			}
		}
	}
	return 0;
}

你可能感兴趣的:(uva 654 - Ratio(暴力))