原题链接:蓝桥杯算法提高VIP-扑克排序
解题思路:把字符都看成数字讲‘J’看成11,‘Q’看成12以此类推,然后判断花色将方块看成1,梅花看成2,红桃看成3,黑桃看成4。用STL库里中的sort排序算法,但是这里用的是结构体还要另外写一个判断函数来检测该不该换位置。
注意事项:注意在判断函数中是否要交换,容易乱可以自己运行试试看看是不是弄反了,要是弄反了再把return 那里改了就行.
参考代码:
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<stdlib.h>
#include<string>
using namespace std;
struct pk
{
char dx;
char hs;
int s;
int h;
};
bool cmp(pk p1,pk p2)
{
if (p1.s > p2.s)
{
return 0;//p1的大小比p2大要交换
}
else if (p1.s < p2.s)
{
return 1;//p1的大小比p2小不用交换
}
else
{
if (p1.h < p2.h)
{
return 1;//p1花色比p2小不用交换
}
else
{
return 0;//p1花色比p2大要交换
}
}
}
int main()
{
pk p[100];//结构体数组
char c1, c2;
for (int i = 1; i <= 5; i++)
{
cin >> c1 >> c2;
p[i].dx = c1;//记录大小
p[i].hs = c2;//记录花色
//大小判断
if (p[i].dx == '1')p[i].s = 1;
else if (p[i].dx == '2')p[i].s = 2;
else if (p[i].dx == '3')p[i].s = 3;
else if (p[i].dx == '4')p[i].s = 4;
else if (p[i].dx == '5')p[i].s = 5;
else if (p[i].dx == '6')p[i].s = 6;
else if (p[i].dx == '7')p[i].s = 7;
else if (p[i].dx == '8')p[i].s = 8;
else if (p[i].dx == '9')p[i].s = 9;
else if (p[i].dx == '10')p[i].s = 10;
else if (p[i].dx == 'J')p[i].s = 11;
else if (p[i].dx == 'Q')p[i].s = 12;
else if (p[i].dx == 'K')p[i].s = 13;
else if (p[i].dx == 'A')p[i].s = 14;
//花色判断
if (p[i].hs == 'd')p[i].h = 1;
else if (p[i].hs == 'c')p[i].h = 2;
else if (p[i].hs == 'h')p[i].h = 3;
else if (p[i].hs == 's')p[i].h = 4;
}
sort(p + 1, p + 1 + 5,cmp);//排序
for (int i = 1; i <= 5; i++)//输出
{
cout << p[i].dx << p[i].hs << " ";
}
return 0;//see you!
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复