蓝桥杯 2014本科C++ B组 奇怪的分式 暴力枚举

摘要:
2#包括<r2;intb)8{9int;13a=b;=num[2]&=num[4])24{25s1=num[1]*10+num[3];28r2=num[2]*num[4];29if(r1<38b=r2;s2)44{45a=s2;48}49else50{51a=s1;b);

蓝桥杯 枚举 奇怪的分式

标题:奇怪的分式

    上小学的时候,小明经常自己发明新算法。一次,老师出的题目是:

    1/4 乘以 8/5

    小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png)

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

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

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

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

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

注意:答案是个整数(考虑对称性,肯定是偶数)。请通过浏览器提交。不要书写多余的内容。

挺简单的,要是暴力枚举也没问题,用一个DFS的深搜代码看上去简单点,另外熟悉GCD,将两个分数的最大公约数求出,相除公约数,再去判断这两个分数是否相同。

答案:14

代码如下

 1 #include<iostream>
 2 #include<cstdio>
 3 #define MAXN 5
 4 using namespace std;
 5 int num[MAXN],s1,s2,r1,r2;
 6 int count=0;
 7 int gcd(int a,int b)
 8 {
 9     int s;
10     while(b)
11     {
12         s=a%b;
13         a=b;
14         b=s;
15     }
16     return a;
17  } 
18 void dfs(int m)
19 {
20     int i,j,a,b,t,ss1,ss2,rr1,rr2;
21     if(m==5)
22     {
23         if(num[1]!=num[2]&&num[3]!=num[4])
24         {
25             s1=num[1]*10+num[3];
26             s2=num[2]*10+num[4];
27             r1=num[1]*num[3];
28             r2=num[2]*num[4];
29             if(r1<r2)
30             {
31                 a=r2;
32                 b=r1;
33                 t=gcd(a,b);
34             }
35             else
36             {
37                 a=r1;
38                 b=r2;
39                 t=gcd(a,b); 
40             }
41             rr1=r1/t;
42             rr2=r2/t;
43             if(s1<s2)
44             {
45                 a=s2;
46                 b=s1;
47                 t=gcd(a,b);
48             }
49             else
50             {
51                 a=s1;
52                 b=s2;
53                 t=gcd(a,b); 
54             }    
55             ss1=s1/t;
56             ss2=s2/t;
57             if(rr1==ss1&&rr2==ss2)
58             {
59                 cout<<num[1]<<"/"<<num[2]<<" * "<<num[3]<<"/"<<num[4]<<" = "<<num[1]<<num[3]<<"/"<<num[2]<<num[4]<<endl;
60                 count++;
61             }
62         }
63     }
64     else
65     {
66         for(i=1;i<=9;i++)
67         {
68             num[m]=i;
69             dfs(m+1);
70         }
71     }
72  } 
73  int main()
74  {
75      dfs(1);
76      cout<<count<<endl;
77      return 0;
78  }

免责声明:文章转载自《蓝桥杯 2014本科C++ B组 奇怪的分式 暴力枚举》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇pycharm 设置参数,快捷键Arduino-舵机控制Servo下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

appscan 对api的手工检测

AppScan 在 API 安全测试中的实例介绍 在本项目中,API 遵循标准的的 REST 架构和背端服务器进行通信。针对 API 的功能测试由两部分组成:一部分是用一个 Web 的测试页面直接实现的,另一部分,由于 Web 页面的局限性(比如不能任意修改 HTTP header),所以是通过 Shell 脚本调用 curl 实现的。 并且这个 API...

一、数组---两数之和(升级版)

给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。 说明: 返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例: 输入: numbers = [2...

Bmob云IM实现头像更换并存入Bmob云数据库中(1.拍照替换,2.相册选择)

看图效果如下: 1.个人资料界面 2.点击头像弹出对话框 3.点击拍照 4.切割图片,选择合适的部分   5.点击保存,头像替换完毕,下面看从相册中选择图片。 6.点击相册 7.任选一张图片 8.切割图片  9.图片替换成功 亲测退出账户后重新登陆或者换模拟器登陆有效!!! 图片已经上传到云端了!!! 下面先上xml代码: 里面出现的可能报...

Android 自定义CheckBox 样式

新建Android XML文件,类型选Drawable,根结点选selector,在这定义具体的样式。 <?xml version="1.0" encoding="UTF-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android">...

CSS3 实现DIV放大和缩小

.zoom { transform: scale(1,1); -ms-transform: scale(1,1); /* IE 9 */ -webkit-transform: scale(0.8,0.8); /* Safari and Chrome */ } <!DOCTYPE html> <html> <head>...

AndroidManifest.xml文件详解(meta-data)

http://blog.csdn.net/think_soft/article/details/7567189 语法(SYNTAX): <meta-dataandroid:name="string"           android:resource="resource specification"           android:value...