zoukankan      html  css  js  c++  java
  • 倪文迪陪你学蓝桥杯2021寒假每日一题:1.13日(2018省赛A组第1题)

    2021年寒假每日一题,2017~2019年的省赛真题。
    本文内容由倪文迪(华东理工大学计算机系软件192班)和罗勇军老师提供。
    后面的每日一题,每题发一个新博文,请大家每天博客蓝桥杯专栏: https://blog.csdn.net/weixin_43914593/category_10721247.html

    每一题提供C++、Java、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)

    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)))
    
  • 相关阅读:
    Python字典处理技巧
    javascript常用对象
    8. 异步操作
    九度OnlineJudge之1022:游船出租
    直方图(下)
    MySQL中关于日期、时间的数据类型和函数
    libvirt(virsh命令介绍)
    11g的alert日志路径
    使用GridView来获取xml文件数据
    MediaPlayer视频播放器
  • 原文地址:https://www.cnblogs.com/luoyj/p/14271448.html
Copyright © 2011-2022 走看看