腾讯2019笔试算法

1. 硬币

牛家村的货币是一种很神奇的连续货币。

他们货币的最大面额是n,并且一共有面额为1,面额为2.....面额为n,n种面额的货币。

牛牛每次购买商品都会带上所有面额的货币,支付时会选择给出硬币数量最小的方案。

现在告诉你牛牛将要购买的商品的价格,你能算出牛牛支付的硬币数量吗? (假设牛牛每种面额的货币都拥有无限个。)

输入格式

共一行,包含两个整数n和m,分别表示货币的最大面额以及商品的价格。

输出格式

一个整数表示牛牛支付的硬币数量。

数据范围

1≤n≤1051≤n≤105,
1≤m≤1091≤m≤109

输入样例1:

6  7

输出样例1:

2

输入样例2:

4  10

输出样例2:

3
#include<iostream>
using namespace std;
int main(){
    int n,m;
    cin>>n>>m;
    cout<<(m+n-1)/n<<endl;
}

2. 奇妙的数列

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

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

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

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

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

输入格式

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

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

输出格式

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

数据范围

1≤q≤1051≤q≤105,
1≤l≤r≤1091≤l≤r≤109

输入样例1:

4

2  4

2  2

3  3

1  5

输出样例1:

3

2

-3

-3

输入样例2:

1

1  1000000000

输出样例2:

500000000

//   -1,2,-3,4,-5
// (-1,2)-3,4,-5  ——l奇:(奇+偶)=1
//   -1(2,-3)4,-5  ——r奇:(偶+奇)=-1
//       l...r
//       int k=(r-l+1)/2;
      
#include<iostream> 
using namespace std;
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        int l,r;
        cin>>l>>r;
        int k=(r-l+1)/2;
        int res=0;
        //如果(r-l+1)为偶数,正好偶数对个k
        //l为数-1+2
            if(l%2==1)  res=k;
            else    res=-k;    
          
        //如果(r-l+1)为奇数,余r
        if((r-l+1)%2==1)
        {
            if(r%2==0)  res+=r;
            else    res-=r;
        }
        cout<<res<<endl;
    }
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章