(暴力枚举) UVa 10976 Fractions Again?!

(暴力枚举)UVa10976FractionsAgain?!

题目:

输入一个k,让你求得所有的满足 1/k = 1/x + 1/y 的情况,并且打印出来 。


分析:

这是一道简单暴力枚举的题目。


枚举对象: y (x可以根据k和y直接得出)


枚举范围: [ k + 1 , 2 * k]


判断条件: 之前的想法是( int ) ( 1.0 / (1.0 / k - 1.0 / y ) ) ==(1.0 /(1.0 /k-1.0 /y) ) // 当x为整数的时候满足条件,打印出来 。

后来想想这种精确度的东西肯定会出问题,所以还是不用这个了。

模拟分数之间的减法 当 ( k * y ) % ( y - k ) == 0 // 同样是说明了x的分子为1,即x为整数。


实现代码:


#include <iostream>

using namespace std;

int xHub[10010];
int yHub[10010];


int main( int argc, char const *argv[] ) {
	int k;
	while ( cin >> k ) {
		int maxn = k << 1;
		int count = 0;
		for (int y = k + 1; y <= maxn; y++) {
			if ( (k * y ) % ( y - k ) == 0 ) {
				xHub[count] = (k * y ) / ( y - k );
				yHub[count++] = y;
			}
		}
		cout << count << endl;
		for ( int i = 0; i < count; ++i ) {
			cout << "1/" << k << " = 1/" << xHub[i] << " + 1/" << yHub[i] << endl;
		}
	}
	return 0;
}



版权声明:本文为博主原创文章,未经博主允许不得转载。By PengCoX ( Pengc825@foxmail.com )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值