P1001 A+B Problem 题解

· · 题解

你好啊,欢迎进入编程的世界!接下来你要迎接的挑战是:进入编程世界的关键一招,a+b 问题!

如果你通过了这个问题,那么你就彻底打开了通往新世界的大门!那让我们开始吧!

C++

我想了一下,传统的 a+b 还是太吃操作了,我们有没有什么更有趣的算法来解决呢,有的兄弟有的,我这边推荐二分,二分是一个很有用的算法,在红题到黑题你都能看到他的身影!

我们假设 mid 为我们当前二分的值,l,r 为我们目前已经锁定的左右边界。

每次二分开始的时候,我们将 mid 设为 l,r 的平均值,也就是 \frac{l+r}{2},在本题因为没有小数,所以我们可以向下取整。

如果 a+b<mid,那么说明 mid 大了,这个时候我们把右边界 r 设为 mid-1 就好了。

如果 a+b>mid,那么说明 mid 小了,这个时候我们把左边界 l 设为 mid+1 就好了。

如果 a+b=mid,那么恭喜你,你找到了答案!这个时候我们输出这个 mid 就可以了!

我们可以使用 while 循环来重复这个过程,直到我们找到答案。

由于过程中可能会爆 int,所以我们需要可以储存更大整数变量的类型:long long

附上一份代码,如果想要真正踏入编程的世界,那么是不可以复制别人的代码提交的,需要你亲手打出来,体验编程之美!

#include<iostream>
using namespace std;
long long a,b;
int main(){
    long long l=-2e9,r=2e9,mid;
    cin>>a>>b;
    while(l<=r){
        mid=(l+r)>>1;
        if(a+b==mid){
            cout<<mid;
            break;
        }
        else if(a+b<mid){
            r=mid-1;
        }
        else if(a+b>mid){
            l=mid+1;
        }
    }
    return 0;
}

如果你通过了这道题,那么恭喜你,你现在可以挑战所有带有二分标签的题目了,让我们继续加油吧!

python

同时附上一篇 python 题解。

由于 python 中的 input 会读入一行的字符串,所以这里我们使用 split 来将这个字符串分割成两个正整数。

split 可以将一个字符串函数默认按照空格将字符串分割并返回一个列表。

split 结束之后,s 列表中存储的是两个字符串,但是我们需要两个整型变量进行加减,所以需要使用 int(s[0])

s=input().split()
print(int(s[0])+int(s[1]))