扑克牌排序

这篇文章讨论了解决一个编程问题,如何根据特定规则(如2最大,13次之,花色顺序)对52张扑克牌进行排序。作者使用C++中的结构体和排序函数,通过调整数值来实现这一过程。
摘要由CSDN通过智能技术生成

题目描述

小明手上有一副扑克牌,共 5252 张,共有 44 种花色,分别用 S、H、D、C 表示,每种花色有 1313 张牌,用数字 11 到 1313 表示。
在某种玩法中,对于单张牌而言,数字为 22 的牌最大,数字为 11 的次之,接下来从大到小依次为数字为 1313 的、数字为 1212 的......数字为 33 的牌最小。
如果牌面数字相同,花色为 S 的最大,接下来从大到小依次是花色为 H、D、C 的。
小明从这副扑克牌里抽出若干张,请你帮他排个序吧

【输入格式】

输入为 N+1 行:
第一行为一个整数 N,0<N≤52,为抽出的牌数;
接下来有 N 行,每行有一个字符和一个整数,分别代表牌的花色和牌面数字。
保证没有重复的牌。

【输出格式】

输出为 N 行,为按要求排序后的扑克牌。每行有一个字符和一个整数,分别代表牌的花色和牌面数字。

【输入输出样例】

输入

5
C 1
H 13
D 1
C 13
S 2

输出

S 2
D 1
C 1
H 13
C 13

思想

这是一道考察结构体的题目。结构体中有花色数字大小两个变量,但是数值为1或2的牌要进行特殊处理,可以先把1或2的牌加13,再去排序,最后遇见14或15时再减去13。

由于S,H,D,C在美国信息交换标准代码中已经有了顺序,所以直接排序就行了。

AC代码

#include <iostream>
#include <algorithm>
using namespace std;

struct Stu
{
	char c;
	int num;
}a[100005];

bool cmp (Stu x, Stu y)
{
	if (x.num != y.num)
	{
		return x.num > y.num;
	}
	return x.c > y.c;
}

int main()
{
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i].c >> a[i].num;
		if (a[i].num == 1 || a[i].num == 2)
		{	
			a[i].num += 13;
		}
	}
	sort(a + 1, a + n + 1, cmp);
	for (int i = 1; i <= n; i++)
	{
		if (a[i].num == 14 || a[i].num == 15)
		{	
			a[i].num -= 13;
		}
	}
	for (int i = 1; i <= n; i++)
	{
		cout << a[i].c << " " << a[i].num << endl;
	}

	return 0;
}

  • 18
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值