算法提高 12-2扑克排序

本文介绍了一种特定的扑克牌排序算法,该算法首先定义了扑克牌的排序规则,然后通过一系列转换函数实现了对输入的五张牌进行排序的功能。排序规则为数字从小到大排序,若数字相同则按花色排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  算法提高 12-2扑克排序  
时间限制:1.0s   内存限制:256.0MB
    
问题描述
  扑克牌排序:构造扑克牌数组,对扑克牌进行排序。排序原则如下:数字从小到大是2-10、J、Q、K和A,花色从小到大是方块(diamond)、梅花(club)、红桃(heart)、黑桃(spade)。两张牌比较时先看数字,数字相同时看花色。要求对输入的扑克牌进行从小到大排序。
  输入五张牌(表示黑桃2、红桃3、黑桃3、方块A和梅花J): 2 s 3 h 3 s A d J c
  输出结果应为:2 s 3 h 3 s J c A d数组长度固定为5。
样例输出
与上面的样例输入对应的输出。
例:
数据规模和约定
  输入数据中每一个数的范围。

代码实现:

#include<bits/stdc++.h>

using namespace std;

int change(char s){
	if(s == 'd'){
		return 1;
	}
	else if(s == 'c'){
		return 2;
	}
	else if(s == 'h'){
		return 3;
	}
	else{
		return 4;
	}
}
char chage(int n){
	if(n == 1){
		return 'd';
	}
	else if(n == 2){
		return 'c';
	}
	else if(n == 3){
		return 'h';
	}
	else if(n == 4){
		return 's';
	}
	else if(n == 11){
		return 'J';
	}
	else if(n == 12){
		return 'Q';
	}
	else if(n == 13){
		return 'K';
	}
	else if(n == 14){
		return 'A';
	}
}

int main(){
	//freopen("input.txt", "r", stdin);
	string str;
	cin >> str;
	
	int length = str.size();
	int num[60][2];
	int i, j;
	for(i = 0, j = 0; i < length; j ++){
		if(str[i] - str[i + 1] == 1){
			num[j][0] = 10;
			num[j][1] = change(str[i + 2]);
			i = i + 3;
			continue;
		}
		else if(str[i] == 'J'){
			num[j][0] = 11;
		}
		else if(str[i] == 'Q'){
			num[j][0] = 12;
		}
		else if(str[i] == 'K'){
			num[j][0] = 13;
		}
		else if(str[i] == 'A'){
			num[j][0] = 14;
		}
		else{
			num[j][0] = str[i] - '0';
		}
		num[j][1] = change(str[i + 1]);
		i = i + 2;
	}
	
	int k;
	//对扑克数字排序 
	for(k = 0; k < j - 1; k ++){
		for(i = 0; i < j - 1; i ++){
			int t1, t2;
			if(num[i][0] > num[i + 1][0]){
				t1 = num[i][0];
				t2 = num[i][1];
				num[i][0] = num[i + 1][0];
				num[i][1] = num[i + 1][1];
				num[i + 1][0] = t1; 
				num[i + 1][1] = t2;
			}
		}
	}
	//对花色排序 
	for(i = 0; i < j - 1; i ++){
		for(k = 0; k < j - 1; k ++){
			int t;
			if(num[k][0] == num[k + 1][0]){
				if(num[k][1] > num[k + 1][1]){
					t = num[k][1];
					num[k][1] = num[k + 1][1];
					num[k + 1][1] = t;
				}
			}
		}
	}
	
	for(i = 0; i < j; i ++){
		if(num[i][0] > 10){
			cout << chage(num[i][0]);
		}
		else{
			cout << num[i][0];
		}
		cout << chage(num[i][1]) << " ";
	}
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值