騰訊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;
}

 

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