首页 > 编程语言 >小猴编程周赛C++ | 卡牌顺序

小猴编程周赛C++ | 卡牌顺序

时间:2024-03-27 22:04:28浏览次数:20  
标签:周赛 diamond heart club 卡牌 C++ JOKER spade

学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!

附上汇总贴:小猴编程C++ | 汇总-CSDN博客


【题目描述】
小猴有 n n n卡牌,编号依次是 1 ∼ n 1\sim n 1∼n。除了花色为“王”的卡牌没有点数之外,其他的卡牌都有一种花色和一个点数,花色为 J O K E R JOKER JOKER(王) 、 s p a d e spade spade(黑桃) 、 h e a r t heart heart(红桃) 、 d i a m o n d diamond diamond(方块) 、 c l u b club club(梅花) 之一, 点数为 1 ∼ 13 1\sim 13 1∼13之一。
游戏规定,不同花色的牌具有的优先级

  • J O K E R JOKER JOKER为第一优先级;
  • s p a d e spade spade为第二优先级;
  • c l u b club club和 d i a m o n d diamond diamond为第三优先级;
  • h e a r t heart heart为第四优先级。
    现在小猴要把所有卡牌进行排序,排序的规则为:
  • 对于不同优先级的卡牌,优先级越高(越小)则在卡牌中的位置越靠前;
  • 对于同一优先级的卡牌,点数越小则在卡牌中的位置越靠前;
  • 对于同一优先级且同一点数的卡牌,编号越小则在卡牌中的位置越靠前。
    请你帮助小猴完成所有卡牌的排序。
    【输入】
    第一行,包含一个整数 n n n,表示卡牌的张数;
    接下来 n n n行,其中第 i i i行用来描述编号为 i i i的卡牌,每行包含一个字符串 c c c,表示卡牌花色。如果 c c c不为 J O K E R JOKER JOKER, 则还会有一个正整数 x x x表示点数。
    保证所有的字符串 c c c一定是 J O K E R 、 s p a d e 、 h e a r t 、 d i a m o n d 、 c l u b JOKER、spade、heart、diamond、club JOKER、spade、heart、diamond、club之一。
    【输出】
    n n n行,每行包含一个整数和一个字符串,第 i i i行的整数和字符串表示排序之后第 i i i张牌的编号和花色。
    【输入样例】
5
club 9
JOKER
diamond 6
spade 1
heart 12

【输出样例】

2 JOKER
4 spade
3 diamond
1 club
5 heart

【代码详解】
[图片]

#include <bits/stdc++.h>
using namespace std;
struct Card {
    string c;
    int num, id, g;
}a[100005];
int n;
bool cmp(Card x, Card y)
{
    if (x.g!=y.g) return x.g<y.g;  // 优先级越高(越小)越靠前
    if (x.num!=y.num) return x.num<y.num;  // 点数越小越靠前
    return x.id<y.id;  // 编号越小越靠前
}
int main()
{
    cin >> n;  // 输入n
    for (int i=1; i<=n; i++) {  // 遍历n张卡牌
        cin >> a[i].c;  // 输入花色
        a[i].id = i;  // 给编号赋值
        if (a[i].c!="JOKER") cin >> a[i].num;  // 不是JOKER的话,还需要记录点数
        if (a[i].c=="JOKER") a[i].g=1;  // 定义优先级
        else if (a[i].c=="spade") a[i].g = 2;
        else if (a[i].c=="club" || a[i].c=="diamond") a[i].g=3;
        else a[i].g = 4;
    }
    sort(a+1, a+n+1, cmp);  // 按照题目要求进行组合排序
    for (int i=1; i<=n; i++) {  // 输出结果
        cout << a[i].id << " " << a[i].c << endl;
    }
    return 0;
}

【运行结果】

5
club 9
JOKER
diamond 6
spade 1
heart 12
2 JOKER
4 spade
3 diamond
1 club
5 heart

标签:周赛,diamond,heart,club,卡牌,C++,JOKER,spade
From: https://blog.csdn.net/guolianggsta/article/details/136517750

相关文章

  • C++之inline
    一.inlineinline是C++的一种机制,作用于函数,将一个函数声明为inline,可以让编译器在编译代码时,将“对此函数的每一个调用”都以函数本体替换之,该过程发生在编译期间。inline的优点:它可以省去函数调用所带来的额外开销,提高程序的速度。inline的缺点:过分使用inline函数会导......
  • 【c++初阶】类与对象(上)
    ✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨......
  • C++之函数的重载
    指函数名可以相同,提高复用性函数重载满足条件:1.同一个作用域下2.函数名称相同3.函数参数类型不同或者个数不同或者顺序不同注意:函数的返回值不可以作为函数重载的条件//函数重载需要函数都在同一个作用域下voidfunc(){ cout<<"func的调用!"<<endl;}vo......
  • 【C++】string类(常用接口)
     ......
  • C++ 运算符全解析:从基础概念到实际应用
    C++运算符运算符用于对变量和值执行操作。在下面的示例中,我们使用+运算符将两个值相加:intx=100+50;虽然+运算符经常用于将两个值相加,就像上面的示例一样,但它也可以用于将变量和一个值相加,或者将一个变量和另一个变量相加:intsum1=100+50;//150(100......
  • C++ STL - 优先级队列及其模拟实现
    目录0.引言1.priority_queue介绍 1.1构造函数 1.2 priority_queue接口函数使用 1.3仿函数  1.4题目练习 2. priority_queue模拟实现2.1基本框架:2.2默认构造函数2.3基本函数2.4堆的向上以及向下调整0.引言优先队列(priority_queue)是一种......
  • C++ STL- list 的使用以及练习
    目录0.引言1.list介绍 2.list使用2.1构造函数2.2listiterator的使用 3listcapacity 4.listelementaccess 5.listmodifiers 6.list迭代器失效 7.list与vector对vector8.OJ题讲解 删除链表的倒数第N 个节点:0.引言本篇博客我们......
  • 链式栈回文字符串的判断(C++版)
    大家好我是大一新生,如果代码有啥错误和改进的地方可以评论哦,谢谢观念看;#include<iostream>#include<iomanip>usingnamespacestd;#defineok1#defineerror0#defineSelemtypechar#defineStatusint#defineMAXSIZE100typedefstructstack{//链式栈的结构  ......
  • 2023第14届蓝桥杯大赛软件赛省赛C/C++大学A组第6题题解
    目录问题描述:方法一:dfs暴力模拟(45%)方法二:dfs剪枝(100%)问题描述:        小蓝正在一个瓜摊上买瓜。瓜摊上共有n个瓜,每个瓜的重量为Ai。小蓝刀功了得,他可以把任何瓜劈成完全等重的两份,不过每个瓜只能劈一刀。小蓝希望买到的瓜的重量的和恰好为m。请问小蓝至......
  • 【华为OD】2024年机试C卷真题集:最新的真题集题库 C/C++/Java/python/JavaScript
    【华为OD】2024年C卷真题集:最新的真题集题库C/C++/Java/python/JavaScript-CSDN博客2024年C卷真题题集题库,有2种分数的题目列表,分别是100分的列表、200分的列表需要订阅请看链接:C卷100分真题集质量分:94价格:39.9元C卷200分真题集质量分:94价格:99.9元从2023年11月开始,华为OD......