標題:
202404新手2-撲克
[打印本頁]
作者:
may
時間:
2024-10-31 16:21
標題:
202404新手2-撲克
[attach]20109[/attach]
撲克 (Poker)
問題敘述
過年期間,打牌是許多家庭的傳統活動。今年,當你從櫃子中翻出已久未用的撲克牌時,一個意外發生了。
由於存放撲克牌的盒子過於老舊,當你拿它出來時,牌散落了一地。
更麻煩的是,盒子裡不只放著一副撲克牌,而是混合了多副牌。你好不容易撿起你見到的每一張牌,但有些牌好像掉進櫃子間的縫隙了,你不確定現在到底能湊出幾副牌。 一副「完整牌組」包含52張牌,分為四個花色:紅心、方塊、梅花與黑桃。每個花色包含從2到10的數字牌,以及J、Q、K、A共13張牌。為了方便起見,撲克以1到52編號。
請撰寫一個程式,分析一堆混在一起的撲克牌,輸出: (1) 在不增加任何牌的情況下,以目前的牌最多能湊出幾副完整牌組; (2) 若要用上所有現有的牌去湊出完整牌組,最少還需要補幾張牌。
[attach]20108[/attach]
範例1
:
總共有10張牌,湊不出一副完整的牌,還需要補42張牌。
範例2:
總共有53張牌,其中可以湊出一副完整的牌,還需要補51張以湊出第二副牌。
範例3
:總共有3張牌,有三張1,所以要湊出三副完整的牌,因此還需要補153張。
評分說明
此題目測資分為兩組,每組測資有多筆測試資料,需答對該組所有測資才能獲得該組分數,各組詳細限制如下。
第一組(20 分):輸入保證每個編號只會出現最多一次。
第二組(30 分):補的牌數量不會超過51張。 第三組(50 分):無特殊限制。
作者:
may
時間:
4 天前 20:07
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >>n;
vector<int> cards(n);
// 紀錄各張牌的數量
vector<int> cardsCounter(53, 0);
for (int i = 0; i < n; i++)
{
cin >> cards[i];
// 計算各張牌的數量
++cardsCounter[cards[i]];
}
// 找到數量最多和最少的牌(同花色)
int maxCount = 0;
int minCount = 1000;
for (int i = 1; i <= 52; i++)
{
if (cardsCounter[i] > maxCount)
{
maxCount = cardsCounter[i];
}
if (cardsCounter[i] < minCount)
{
minCount = cardsCounter[i];
}
}
// minCount 是數量最少的花色的牌數,表示最少有 minCount 副牌
// 要湊成完整的牌至少要 maxCount 副牌,總共會有 maxCount * 52 張
// 還需要補的牌數量為 maxCount * 52 - n
cout << minCount << " " << (maxCount * 52) - n << endl;
}
/*
10
1 2 3 4 5 6 7 8 9 10
輸出
0 42
*/
複製代碼
回復
1#
may
歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://seed.istak.org.tw/)
Powered by Discuz! 7.2