LQ0211 奇怪的分式枚举+GCD
Posted 海岛Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0211 奇怪的分式枚举+GCD相关的知识,希望对你有一定的参考价值。
题目来源:蓝桥杯2014初赛 C++ B组F题
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
上小学的时候,小明经常自己发明新算法。一次,老师出的题目是: 1 4 \\frac14 41 乘以 8 5 \\frac85 58
小明居然把分子拼接在一起,分母拼接在一起,答案是: 18 45 \\frac1845 4518 (参见下图)
1 4 × 8 5 = 18 45 \\frac14 × \\frac85=\\frac1845 41×58=4518
直接去拼接分子、分母,也可以完成计算?
老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼!
对于分子、分母都是 1 ~ 9 中的一位数的情况,还有哪些算式可以这样计算呢?
请写出所有不同算式的个数(包括题中举例的)。
显然,交换分子分母后,例如: 4 1 \\frac41 14 乘以 5 8 \\frac58 85是满足要求的,这算做不同的算式。
但对于分子分母相同的情况, 2 2 \\frac22 22 乘以 3 3 \\frac33 33 这样的类型太多了,不在计数之列!
AC的C语言程序如下:
/* LQ0211 奇怪的分式 */
#include <stdio.h>
int gcd(int n, int m)
return m ? gcd(m, n % m) : n;
int main()
int cnt = 0;
for (int a = 1; a <= 9; a++)
for (int b = 1; b <= 9; b++)
if (b == a)
continue;
for (int c = 1; c <= 9; c++)
for (int d = 1; d <= 9; d++)
if (d == c)
continue;
int gcd1 = gcd(a * c, b * d);
int gcd2 = gcd(a * 10 + c, b * 10 + d);
if (a * c / gcd1 == (a * 10 + c) / gcd2 && b * d / gcd1 == (b * 10 + d) / gcd2)
cnt++;
printf("%d\\n", cnt);
return 0;
以上是关于LQ0211 奇怪的分式枚举+GCD的主要内容,如果未能解决你的问题,请参考以下文章