蓝桥杯 2014本科C++ 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  }
时间: 2024-07-28 13:56:12

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

蓝桥杯 2014本科C++ B组 六角填数 枚举排列

标题:六角填数 如图[1.png]所示六角形中,填入1~12的数字. 使得每条直线上的数字之和都相同. 图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少? 请通过浏览器提交答案,不要填写多余的内容. 简单的枚举排列,只要提前将12个结点标号,来判断六个线段总和是否相等. 代码如下: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define MAXN 13 5 int num

蓝桥杯 2014本科C++ B组 地宫取宝 DFS+记忆化搜索

历届试题 地宫取宝   时间限制:1.0s   内存限制:256.0MB 问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿). 当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送给小明. 请你帮小明算一算,在给定的局面下,他有多少种不

蓝桥杯 2014本科C++ B组 李白打酒 三种实现方法 枚举/递归

标题:李白打酒 话说大诗人李白,一生好饮.幸好他从不开车. 一天,他提着酒壶,从家里出来,酒壶中有酒2斗.他边走边唱: 无事街上走,提壶去打酒. 逢店加一倍,遇花喝一斗. 这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了. 请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b.则:babaabbabbabbbb 就是合理的次序.像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的). 注意:通过浏览器提交答案.答案是个整数.不要书写任何多

李白打酒(蓝桥杯2014)

    李白打酒(蓝桥杯2014) 1.题目描述: 话说大诗人李白,一生好饮.幸好他从不开车. 一天,他提着酒壶,从家里出来,酒壶中有酒2斗.他边走边唱: 无事街上走,提壶去打酒. 逢店加一倍,遇花喝一斗. 这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了. 请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b.则:babaabbabbabbbb 就是合理的次序.像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的). 2. #inclu

2014年第五届蓝桥杯试题C/C++程序设计B组——奇怪的分式

题目描述: 标题:奇怪的分式 上小学的时候,小明经常自己发明新算法.一次,老师出的题目是: 1/4 乘以 8/5 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png) 老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼! 对于分子.分母都是 1~9 中的一位数的情况,还有哪些算式可以这样计算呢? 请写出所有不同算式的个数(包括题中举例的). 显然,交换分子分母后,例如:4/1 乘以 5/8 是满足要求的,这算做不同的算式. 但对于分子分母相同的情况,2/2 乘以

第五届蓝桥杯C++本科A组

今天上午参加了第五届蓝桥杯比赛,还是去年的地方,还是去年的考场,不同的是经过了一年的历练,多了一份坦然与自信.不管最后结果如何,是对自己一年学习的一个小小的交代.ACMER IN HHUC, we never say no. 结果填空 1. a*a+b*b+c*c=1000;a,b,c均为整数,求一组解中的最小值.暴力的题目,很容易就想到了0,10,30.所以没多想就填上了0,可是考完发现还可以是负数...悲了个剧了,三分就这么水没了.. 2. 类似于往年的一道高斯的生日,求距离某一天(yyyy

2014第五届蓝桥杯JAVA本科B组_猜字母

1 /* 2 把abcd...s共19个字母组成的序列重复拼接106次,得到长度为2014的串.   3 接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母.   4 得到的新串再进行删除奇数位置字母的动作.如此下去,最后只剩下一个字母,请写出该字母.   5 答案是一个小写字母,请通过浏览器提交答案.不要填写任何多余的内容. 6 */ 7 public class Main { 8 public static void main(String[] args) { 9

2016蓝桥杯决赛C/C++A组第三题 打靶

题意: 小明参加X星球的打靶比赛.比赛使用电子感应计分系统.其中有一局,小明得了96分. 这局小明共打了6发子弹,没有脱靶.但望远镜看过去,只有3个弹孔.显然,有些子弹准确地穿过了前边的弹孔. 不同环数得分是这样设置的:1,2,3,5,10,20,25,50 那么小明的6发子弹得分都是多少呢?有哪些可能情况呢? 分析: #include <stdio.h> #define N 8 void f(int ta[], int da[], int k, int ho, int bu, int sc)

第五届蓝桥杯决赛C\C++B组——生物芯片

第一部分:题目 生物芯片 X博士正在研究一种生物芯片,其逻辑密集度.容量都远远高于普通的半导体芯片. 博士在芯片中设计了 n 个微型光源,每个光源操作一次就会改变其状态,即:点亮转为关闭,或关闭转为点亮. 这些光源的编号从 1 到 n,开始的时候所有光源都是关闭的. 博士计划在芯片上执行如下动作: 所有编号为2的倍数的光源操作一次,也就是把 2 4 6 8 ... 等序号光源打开 所有编号为3的倍数的光源操作一次, 也就是对 3 6 9 ... 等序号光源操作,注意此时6号光源又关闭了. 所有编