騰訊2019提前批筆試 硬幣題解

2021-09-18 04:25:43 字數 1563 閱讀 7173

演算法描述:

牛家村的貨幣是一種很神奇的連續貨幣.

他們貨幣的最大面額是n,並且一共有面額為1,面額為2,...,面額為n,n種面額的貨幣.

牛牛每次購買商品都會帶上所有面額的貨幣,支付時會選擇給出數量最小的方案.

現在告訴你牛牛將要購買的商品的**,你能算出牛牛支付的硬幣數量嗎?

第一行兩個整數n,m.表示貨幣的最大面額和商品的**.

輸出描述:

乙個整數表示牛牛支付的硬幣數量.

輸入6 7

輸出 2

輸入 4 10

輸出3演算法思路:這是一道典型的貪心演算法題解.因為要選擇給出數量最小的方案,所以每次應該選擇最大的硬幣.直到最大面額再加1時會超過**時,再選取小一點的硬幣面額進行新增,直到與**一樣.

舉例:

6 7,先計算出7中可以用多少個面額為6的硬幣,a=7/6=1,再用7-1*6=1;再只需乙個面額為1的硬幣就滿足要求.

4 10,先計算出10中可以用多少個面額為4的硬幣,a=10/4=2,再計算出剩餘10-4*2=2,只需乙個面額為2的硬幣就滿足要求.

**實現:

#include#includeusing namespace std;

int main()

else//m<=n

}cout << count << endl;

return 0;

}

附加一關於貪心演算法計算硬幣個數問題,可以更好的理解.

幣種統計問題:

問題描述:某單位給每個職工發工資.為了保證不要臨時兌換零錢,且取款的張數最少,

取工資前要統計出所有職工的工資所需各種幣值(100,50,20,10,5,2,1)的張數.

演算法策略:

1)資料結構選取:利用陣列來儲存面額,再利用乙個陣列來儲存每個面額所需的張數.

2)演算法步驟:

輸入人員個數,然後輸入每個人員的工資

對工資進行分解,每次選取最大的面值來湊,所以面值以大到小來排序.

**實現:

#include#include#includeusing namespace std;

bool cmp(const int&a, const int& b)

int main4()

, s[7] = ;

//人員

cout << "請輸入工作人員的人數";

int n;

cin >> n;

cout << "請輸入面額:";

//初始化面額,並從大到小排序

for (int i = 0; i < 7; ++i)

sort(m,m+7,cmp);

for (int i = 0; i < n; ++i) }

for (int i = 0; i < 7; ++i)

return 0;

}

2019騰訊c 後台提前批筆試題

五個演算法題。第一題 有n種硬幣,面額分別為1 n,每種硬幣都有無限個,假設要付款的金額為m。要求支付硬幣數最少。為多少?答 m n m n 很簡單的乙個題 第二題 乙個數列 1 2 3 4 5 6 詢問q次,每次詢問區間 l,r 的區間和,輸出每個詢問的答案.答 第1個和第2個加起來為1,第3,4...

2019VIVO提前批筆試記錄

一方面用於自己記錄,一方面給小夥伴們乙個參考 如有錯誤,懇請指正 題目描述 1.給定兩個整形陣列,求差集 需要補全的函式傳入的引數是兩個陣列及對應的陣列長度 思考 經典題目,衍生出求並集,交集,以下給出兩種思路,並分別分析複雜度 思路一 將array1分為三段 建議做的時候畫圖 分別為 已經比較過的...

騰訊提前批筆試題 2 魔法序列

小q擁有乙個只儲存了整數的序列叫做魔法序列。一開始序列為空,小q會執行以下兩種操作 add x 表示往系列中新增乙個值為x的整數。add陣列表示每次往陣列中新增的數字 get y 表示在第y次add操作後,取出序列中第k小的數,並將其輸出。其中k初始時候為1,每執行一次get操作之後,k的值會 1。...