算法题每日一练---第32天:奇怪的分式

Posted 知心宝贝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法题每日一练---第32天:奇怪的分式相关的知识,希望对你有一定的参考价值。

一、问题描述

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

小明居然把分子拼接在一起,分母拼接在一起,答案是:(参见下图)

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

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

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

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

但对于分子分母相同的情况, 这样的类型太多了,不在计数之列!

二、题目要求

考察

  • 逻辑思维,数学思想
  • 建议用时10~15min

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 128M

三、问题分析

一开始我拿到这题的时候,想到了深度搜索,一个个判断条件。写到一半时,发现不对,这不是四重for循环暴力就能解决的问题吗。

首先,四重for循环范围分别从1到9,分别代表第一个、第二个分数的分子、分母,让普通的两个分数相乘之后的结果等于两个分数分子分母彼此相连接的结果相等就行。

四重循环只需判断6000多次,0.1s出结果,暴力法yyds。

注意

分子、分母相同的条件不算在内

四、编码实现

```c++
#include<iostream>
using namespace std;
int main()

long long int i,j,k,p,ans=0;//初始化条件
double a,b;//定义两个分数的值
for(i=1;i<=9;i++)//第一层循环

for(j=1;j<=9;j++)//第二层循环

for(k=1;k<=9;k++)//第三层循环

for(p=1;p<=9;p++)//第四层循环

a=1.0(ik)/(jp);//第一个分数的结果,小数表示
b=1.0
(10i+k)/(10j+p);//第二个分数的结果,小数表示
if(a==b&&j!=i&&k!=p)//满足条件

ans++;//计数++





cout<<ans;//输出结果
return 0;


## 五、输出结果
输出结果为:14

![2.png](https://s4.51cto.com/images/blog/202204/25081314_6265e79ad5e0027847.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

以上是关于算法题每日一练---第32天:奇怪的分式的主要内容,如果未能解决你的问题,请参考以下文章

算法题每日一练---第12天:算式900

算法题每日一练---第52天:位运算求解子集

算法题每日一练---第22天:猜字母(String类)

算法题每日一练---第51天:找不同

算法题每日一练---第58天:错误的集合

算法题每日一练---第57天:解码异或后的数组