洛谷 P1148 拱猪计分

【题目链接】

洛谷 P1148 拱猪计分

题目补充说明:

D10与D11都可能出现,D10作用与D11相同。如果D10与D11同时出现,只算有1张D牌。

当H1~H13都有,但D或S只有1个时:D牌作用:-100分,S牌作用:+100分。

【题目考点】

1. 模拟

【解题思路】

根据题意直接模拟

设布尔数组h,用来记录是否有牌Hi。设布尔变量s12, d10, c10,表示是否存在S、D和C牌。

按照题目描述,根据该玩家手中存在的牌的种类,计算分数。

具体解释见注释。

【题解代码】

解法1:模拟
cpp 复制代码
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
#define N 105
int proc(int n)//n:有n张牌 
{
	string s;
	int score = 0;
	bool h[20] = {}, s12 = false, d10 = false, c10 = false;//h[1]~p[13]:H1~H13 是否存在  
	int pt[15] = {0,-50,-2,-3,-4,-5,-6,-7,-8,-9,-10,-20,-30,-40};//pt[i]:牌Hi的分数 
	for(int i = 1; i <= n; ++i)
	{
		cin >> s;
		if(s[0] == 'H')
			h[stoi(s.substr(1))] = true;//标记h[i]为真 
		else if(s[0] == 'S')
			s12 = true;
		else if(s[0] == 'D')//D10与D11都认为是D10 
			d10 = true;
		else if(s[0] == 'C')
			c10 = true;
	}
	bool hasAllH = true;//是否有所有13张H牌 
	for(int i = 1; i <= 13; ++i)
		if(h[i] == false)
		{
			hasAllH = false;
			break;
		}
	if(hasAllH)//如果有全部13张红心牌 
	{
		score = 200;//全红心牌加200 
		if(s12 && d10)//如果同时有S牌和D牌 
			score = 500;
		else if(s12)//如果只有S,那么减100 
			score -= 100;
		else if(d10)//如果只有D,那么加100 
			score += 100;
		if(c10)//如果有C牌,分数乘2 
			score *= 2;
	}
	else//如果并没有持有所有的红心牌 
	{
		for(int i = 1; i <= 13; ++i)
			if(h[i])//如果有Hi这张牌 
				score += pt[i];
		if(score == 0 && !s12 && !d10 && c10)//如果只有C牌没有其它牌 
			score += 50;
		else
		{
			if(s12)//如果有S牌 
				score -= 100;
			if(d10)//如果有D牌 
				score += 100;
			if(c10)//如果有C牌 
				score *= 2;
		}
	}
	return score;
}
int main()
{
	bool isOver;
	int n, score[5];//score[i]:某局游戏后第i名玩家的得分 
	while(true)
	{
		isOver = true;
		for(int i = 1; i <= 4; ++i)
		{
			cin >> n;
			if(n != 0)
				isOver = false;
			score[i] = proc(n);//求出第i名玩家的得分 
		}
		if(isOver)//如果输入4个0,则跳出 
			break;
		for(int i = 1; i <= 4; ++i)//输出每位玩家的得分 
			cout << (score[i] > 0 ? "+" : "") << score[i] << ' ';//如果是正数则输出正号 
		cout << endl;
	}
	return 0;
}
相关推荐
小xin过拟合3 小时前
day20 二叉树part7
开发语言·数据结构·c++·笔记·算法
lxmyzzs4 小时前
【图像算法 - 23】工业应用:基于深度学习YOLO12与OpenCV的仪器仪表智能识别系统
人工智能·深度学习·opencv·算法·计算机视觉·图像算法·仪器仪表识别
Learn Beyond Limits4 小时前
Multi-output Classification and Multi-label Classification|多输出分类和多标签分类
人工智能·深度学习·神经网络·算法·机器学习·分类·吴恩达
张较瘦_4 小时前
[论文阅读] 软件工程 | GPS算法:用“路径摘要”当向导,软件模型检测从此告别“瞎找bug”
论文阅读·算法·bug
2401_858286115 小时前
OS26.【Linux】进程程序替换(下)
linux·运维·服务器·开发语言·算法·exec·进程
张同学的IT技术日记5 小时前
【奇妙的数据结构世界】用图像和代码对队列的使用进行透彻学习 | C++
算法
极客BIM工作室5 小时前
强化学习算法分类与介绍(含权重更新公式)
算法·分类·数据挖掘
KarrySmile5 小时前
Day8--HOT100--160. 相交链表,206. 反转链表,234. 回文链表,876. 链表的中间结点
数据结构·算法·链表·双指针·快慢指针·hot100·灵艾山茶府
luckycoding5 小时前
1424. 对角线遍历 II
算法·leetcode·职场和发展
CoovallyAIHub6 小时前
基于ICR损失与SVMLP数据集:小目标检测新突破,车牌检测准确率显著提升
深度学习·算法·计算机视觉