2021年寒假每日一題,2017~2019年的省賽真題,
本文內容由倪文迪(華東理工大學計算機系軟體192班)和羅勇軍老師提供,
后面的每日一題,每題發一個新博文,請大家每天看博客藍橋杯專欄: https://blog.csdn.net/weixin_43914593/category_10721247.html
每一題提供C++、Java、Python三種語言的代碼,
文章目錄
- 1、題目描述
- 2、題解
- 3、C++代碼
- 4、Java代碼
- 5、Python代碼
2018省賽A組第1題,題目鏈接:
分數 http://oj.ecustacm.cn/problem.php?id=1359
1、題目描述
1/1 + 1/2 + 1/4 + 1/8 + 1/16 + …
每項是前一項的一半,如果一共有20項,求這個和是多少,結果用分數表示出來,
類似:3/2當然,這只是加了前2項而已,分子分母要求互質,
2、題解
??倪文迪說:“這道題通分一下,再用等比數列求和,就能將原式化簡,然后通過位運算或者冪次運算計算分子、分母,再除掉二者最大公約數,輸出即可,”
??羅老師無話可說,
??算了,還是說一句:注意二進制的有一個基本特征,
1
+
2
+
4
+
.
.
.
+
2
n
=
2
n
+
1
?
1
1+2+4+...+2^n=2^{n+1}-1
1+2+4+...+2n=2n+1?1
3、C++代碼
??代碼中用gcd計算了最大公約數用于約分,使得分子分母互質,不過,其實不用約分,因為本身就是互質的,
#include<bits/stdc++.h>
using namespace std;
int main(){
int a = (1 << 20) - 1; //分子
int b = (1 << 19); //分母
int t = __gcd(a, b); //除去公約數
cout << a/t << "/" << b/t;
return 0;
}
4、Java代碼
public class Main {
public static void main(String[] args) {
int a=(int) Math.pow(2, 20)-1;
int b=(int) Math.pow(2, 19);
System.out.println(a + "/" + b);
}
}
5、Python代碼
??還是Python好,寫一個C++、Java的功夫,可以寫4個Python,
b = 0
a = 1
for i in range(0,20):
b += a
a *= 2
print('%d/%d'%(b,a/2))
print('%d/%d'%(2 ** 20 -1,2 ** 19))
print(str(2 ** 20 -1)+'/'+str(2 ** 19))
print('%d/%d'% (pow(2,20)-1 ,pow(2,19)))
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/248587.html
標籤:java
上一篇:必看!程式員逃生指南!
