蓝桥杯练习题十二 - 分数(c++)
C++ 蓝桥 十二 练习题 分数
2023-09-11 14:21:22 时间
题目如下
1/1 + 1/2 + 1/4 + 1/8 + 1/16 + … 每项是前一项的一半,如果一共有20项,求这个和是多少,结果用分数表示出来。
类似:3/2
当然,这只是加了前2项而已。分子分母要求互质。
下面哪一项是错误的?
题目中给出四个选项:
A.
int gcd(int a, int b)
{
while (b > 0)
{
int c;
c = a % b;
a = b;
b = c;
}
return a;
}
int main()
{
int a = 1048575;
int b = 524288;
int c = gcd(a, b);
cout << a / c << "/" << b / c << endl;
return 0;
}
B.
int gcd(int a, int b)
{
return a % b ? gcd(b, a % b) : b;
}
int main()
{
int a = 1048575, b = 524288;
int t = gcd(a, b);
cout << a / t << "/" << b / t << endl;
return 0;
}
C.
long pow_2(int b)
{
long x = 2;
long res = 1;
while (b > 0)
{
if (b & 1)
res *= x;
b >>= 1;
x = x * x;
}
return res;
}
int gcd(long a, long b)
{
if (b == 0)
return a;
return gcd(b, a % b);
}
int main()
{
cout << pow_2(20) - 1 << "/" << pow_2(19) << endl;
}
D.
long pow_2(int b)
{
long x = 2;
long res = 1;
while (b > 0)
{
if (b & 1)
res *= x;
b >>= 1;
x = x * x;
}
return res;
}
int gcd(long a, long b)
{
if (b == 0)
return a;
return gcd(b, a % b);
}
int main()
{
cout << pow_2(20) << "/" << pow_2(19) << endl;
}
题目解析
说实话,这道题真的挺难的,但难的却是思维,这道题又挺简单的,简单的是题目本身。
说了一通比较扯淡的话,博主也就只敢保证能解出来正确答案,要是找出一种错误的方法,这个难度就有点高了,从讨论区,博主也看到不少关于这道题的数学解法:等比数列公式。看到公式的时候,博主是有印象的,这题目大学时是学过的,还记得iOS中有一个数量的悖论:影响性能的永远不是黎平渲染的阴影圆角,而是数量。用到这里就是:你用不到的东西不代表没用。
题目留给大家,思路博主简单说下吧,这已经是第十二篇了,博主真不敢说对此类问题已经完全了解,说到底都是数学问题,有点心惊。
1.计算和
四个选项看的人有点懵,因为部分选项中没看到累加和的体现, 没错,你没看错,不用怀疑自己,确实没体现出累加和的运算,博主一开始也看的有些晕,这道题是昨天看的,晚上的时候又看了一遍才看明白,今天就现身说法。
这里的考点其实是最大公约数!!!
2.最大公约数
公式里体现的都是a,b两数作为分子分母的互斥的最小数,所以理所当然的要求出他们的最大公约数并分别除以这个最大公约数,有了这个理念,你再去看四个选项,问题就不大了。
求最大公约数,三段最好理解的代码:
片段1:
int gcd(int a, int b)
{
return a % b ? gcd(b, a % b) : b;
}
片段2:
int gcd(int a, int b)
{
while (b > 0)
{
int c;
c = a % b;
a = b;
b = c;
}
return a;
}
片段3:
int gcd(long a, long b)
{
if (b == 0)
return a;
return gcd(b, a % b);
}
总结
看完这道题目,感觉题目的意图不明显,并没有真正的去解题,可能是觉得题目本身不难,要考察的是求取最大公约数的方法,要说题目不难,剩下的,就留给大家去思考了吧,有问题,欢迎评论区留言讨论。
相关文章
- C++学习4-面向对象编程基础(面向对象概念,定义类,定义对象)
- 旅行,说走就走 Help? [C++数据类型和表达式]
- Java实现第十一届蓝桥杯C/C++ 大学 B 组大赛软件类省赛
- java实现第二届蓝桥杯连通问题(C++)
- java实现第二届蓝桥杯地铁换乘(C++)
- java实现第二届蓝桥杯最小公倍数(c++)
- 第二届蓝桥杯C++B组国(决)赛真题
- 第八届蓝桥杯省赛C++A/B组,第八届蓝桥杯省赛JAVAA/B组—分巧克力(二分)
- C/C++基础讲解(六十)之系统篇(读取DOS系统中的国家信息/修改环境变量/显示系统文件表)
- 蓝桥杯官网 试题 PREV-113 历届真题 估计人数【第十届】【决赛】【研究生组】【C++】【Java】【Python】三种解法
- 蓝桥杯官网 试题 PREV-261 历届真题 循环小数【第十一届】【决赛】【研究生组】【C++】【C】【Java】【Python】四种解法
- 验证回文串(C++)
- 完美数(C++)
- MinGW-w64安装教程——著名C/C++编译器GCC的Windows版本
- VS中c++文件调用c 函数 ,fatal error C1853 预编译头文件来自编译器的早期版本号,或者预编译头为 C++ 而在 C 中使用它(或相反)
- 【华为OD机试 2023】 开放日活动、取出尽量少的球 (C++ Java JavaScript Python)
- Qt5.9/C++架构实例(一个简单的MCV架构应用实例)
- C++ 类成员函数作为参数
- C++——重载运算符和重载函数
- C/C++产生随机数
- AI模型设计:配置C++版本pytorch(libtorch 1.12)开发环境以及demo源码的实现
- c++ vector C++ vector存放结构体 并且排序
- 关于C++ const 的全面总结
- VC++年月日时间和64位时间的使用及相互转换(附源码)
- C++11 函数模板的默认模板参数
- C++中union的使用方法
- 第十三届蓝桥杯C++B组国赛C题——卡牌 (AC)
- 第十四届蓝桥杯大赛软件赛省赛(C/C++B组)
- 第十三届蓝桥杯省赛 C++ C 组 I 题、Python B 组 H题——技能升级(AC)
- 第十三届蓝桥杯 C++ B组省赛 C 题——刷题统计(AC)
- 第十三届蓝桥杯C++B组省赛 J 题——砍竹子(AC)
- C++ 异常