头像

Cyan

四川成都

深度强化学习炼丹师

2014年第五届蓝桥杯省赛-F. 奇怪的分式

2014年第五届蓝桥杯省赛-F. 奇怪的分式

2021-12-13 · 34次阅读 · 原创 · 数据结构与算法

原题链接

题面

上小学的时候,小明经常自己发明新算法。一次,老师出的题目是:14\frac{1}{4} 乘以 85\frac{8}{5}

小明居然把分子拼接在一起,分母拼接在一起,答案是:1845\frac{18}{45} (参见下式)

14×85=1845\frac{1}{4} \times \frac{8}{5} = \frac{18}{45}

老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼!

对于分子、分母都是 1 ~ 9 中的一位数的情况,还有哪些算式可以这样计算呢?

请写出所有不同算式的个数(包括题中举例的)。

显然,交换分子分母后,例如:41\frac{4}{1} 乘以 58\frac{5}{8} 是满足要求的,这算做不同的算式。

但对于分子分母相同的情况,22\frac{2}{2} 乘以 33\frac{3}{3}这样的类型太多了,不在计数之列!

题解

枚举

由题,可转换为下式子:

ab×cd=ef\frac{a}{b} \times \frac{c}{d} = \frac{e}{f}

又因题目要求:

ef=a×10+cb×10+d\frac{e}{f} = \frac{a \times 10 + c}{b \times 10 + d}

可以得到:

ab×cd=a×cb×d=ef=a×10+cb×10+d\frac{a}{b} \times \frac{c}{d} = \frac{a\times c}{b\times d} = \frac{e}{f} = \frac{a \times 10 + c}{b \times 10 + d}

则可以得到如下等式:

(a×c)×(b×10+d)=(b×d)×(a×10+c)(a\times c) \times (b \times 10 + d) = (b\times d)\times (a \times 10 + c)

则直接遍历a,b,c,d的每个值即可,满足上述等式即可累加答案。

注意,题目要求 a != bc != d

答案:

14

代码

#include<iostream> using namespace std; int main() { int res = 0; for (int a = 1; a <= 9; ++a) { for (int b = 1; b < 10; ++b) { if (b == a) continue; for (int c = 1; c < 10; ++c) { for (int d = 1; d < 10; ++d) { if (d == c) continue; int e = a * c, f = b * d; int se = a * 10 + c, sf = b * 10 + d; if (se * f == sf * e) res++; } } } } cout << res << endl; return 0; }

标题: 2014年第五届蓝桥杯省赛-F. 奇怪的分式
链接: https://www.fightingok.cn/detail/167
更新: 2022-09-18 22:44:45
版权: 本文采用 CC BY-NC-SA 3.0 CN 协议进行许可