纸牌游戏c++!!!COCI-1282号!!!

题目来源:http://115.29.212.188/problem/COCI-1282

题目:

纸牌游戏

时间限制:C/C++ 1000MS,其他语言 2000MS
内存限制:C/C++ 256MB,其他语言 512MB
难度:普及/提高-
分数:100 OI排行榜得分:14(0.1*分数+2*难度)
出题人:root

描述

小凯撒喜欢玩纸牌游戏,每次他去萨格勒布都会和他的朋友们玩 21 点,这是一种很流行的纸牌游戏。

这个游戏的规则是,在纸牌点数之和小于 21 点之前可以连续抓牌,如果决定不抓牌,则喊 DOSTA

游戏开始时,桌面有 52 张牌 —— 13 种不同牌面的牌,每种有 4 个花色。牌面分别是 2,3,…,J,Q,K,A。它们的点数计算规则是:牌面上的数字就是点数(比如,9 的点数就是 9),特殊地,J,Q,K 都算 10 点,A 算 11 点。

凯撒认为游戏的乐趣在于,当抓了 N 张牌之后,如果点数之和小于或等于 21,他就要思考是否要再多抓一张。假设 X 是已抓牌点数之和与 21 之间相差的点数值,我们知道,如果桌面上的剩余牌中点数大于 X 的纸牌数量比小于等于 X 的纸牌数量要多,或两者一样多,那就不应该再抓牌了。

因为凯撒并不擅于计算是否需要抓牌,所以他请你帮他计算和决策。

输入描述

第一行输入一个正整数 N(1≤N≤52),表示凯撒已经抓牌的张数。

接下来 N 行每行一个正整数,第 i 个正整数是他抓的第 i 张牌点数值。

输出描述

如果凯撒应该继续抓牌,输出 VUCI,否则输出 DOSTA

用例输入 1 

6
2
3
2
3
2
3

用例输出 1 

DOSTA 

用例输入 2 

1
10

用例输出 2 

VUCI

用例输入 3 

2
5
6

用例输出 3 

VUCI

提示

【样例解释】

第一个样例: 已经抓的 6 张牌的总点数是 15,它与 21 的差 X 是 6。桌面上剩余牌中比 6 大的牌有 32 张(分别是 4 张 A、4 张 K、4 张 Q、4 张 J、4 张 10、4 张 9、4 张 8、4 张 7),而比 6 小的牌有 14 张(分别是 1 张 2、1 张 3、4 张 4、4 张 5、4 张 6),所以决定不再抓牌,输出 DOSTA

经过思考,答案:

#include<bits/stdc++.h>

using namespace std;

int t[15] = {0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 16, 4};

int main() {
	int n;
	cin >> n;
	int tmp = 21;
	for (int i = 1; i <= n; i++) {
		int x;
		cin >> x;
		tmp -= x;
		t[x]--;
	}
	int a = 0, b = 0;
	for (int i = 2; i <= 11; i++) {
		if (i > tmp) b += t[i];
		if (i <= tmp) a += t[i];
	}
	if (b > a || a == b) cout << "DOSTA" << endl;
	else cout << "VUCI" << endl;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值