美文网首页
【腾讯2019】奇妙的数列

【腾讯2019】奇妙的数列

作者: 邓泽军_3679 | 来源:发表于2019-04-12 09:10 被阅读0次

    1、题目描述

    妞妞最近迷上了王者荣耀。

    小Q得到了一个奇妙的数列,这个数列有无限多项,数列中的第 i 个数字为i∗(−1)i,比如数列的前几项为-1,2,-3,4,-5…

    小Q兴奋把这个数列拿去给妞妞看,并希望借此邀请妞妞吃饭。

    妞妞想了想,对小Q说:“对于这个数列,我每次询问你一个区间,你在1秒内把这个区间里的数字的和告诉我,如果你答得上来我就跟你一起去吃饭。”

    由于妞妞最近沉迷王者荣耀,已经很久都没理过小Q了,所以小Q不想失去这次珍贵的机会,你能帮帮他吗?

    输入格式
    第一行,一个整数 q,表示妞妞的询问次数。

    接下来 q 行,每行两个整数 l 和 r,表示妞妞询问的区间的左端点和右端点。

    输出格式
    共 q 行,每行一个整数,表示妞妞询问的区间和。

    数据范围
    1≤q≤105,
    1≤l≤r≤109

    输入样例1:
    4
    2 4
    2 2
    3 3
    1 5
    输出样例1:
    3
    2
    -3
    -3

    输入样例2:
    1
    1 1000000000
    输出样例2:
    500000000

    2、问题描述:

    • 热身题,交替式正负数列。连续n项和。

    3、问题关键:

    • 1.考虑有基数项还是偶数项。
    • 2.考虑第一项是基数还是偶数,确定符号。
    • 3.如果是基数项那么,最后一项是基数还是偶数。

    4、C++代码:

    #include <iostream>
    using namespace std;
    int main() {
        int n, l, r;
        cin >> n;
        for (int i = 0; i < n; i ++) {
            cin >> l >> r;
            int k = (r - l + 1) / 2;//前偶数项和。n或者n-1。
            int res  = 0;
            if (l % 2 == 0) res = -k;//如果首项是偶数那么res为负数。
            else res = k;
            if ((r - l + 1) % 2 == 1) {//如果是基数,那么要加上最后一项。
                if(r % 2 == 0) res += r;//最后一项如果是偶数项就上正的。
                else res -= r;
            }
            cout << res << endl;
        }
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:【腾讯2019】奇妙的数列

          本文链接:https://www.haomeiwen.com/subject/hkcfwqtx.html