算法提高 12-2扑克排序

本文介绍了一个简单的扑克牌排序算法,该算法首先定义了扑克牌的结构体,包括数字和花色两个属性。通过输入五张扑克牌的数据,利用比较数字大小和花色大小的原则进行排序,并最终输出排序后的扑克牌序列。

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

问题描述

  扑克牌排序:构造扑克牌数组,对扑克牌进行排序。排序原则如下:数字从小到大是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<stdio.h>
typedef
	struct
	{
		char sz;
		char hs;
	}PM;
void shuru( PM [] , int  );
void shuchu( PM [] , int  );
void paixu( PM [] , int  );
int q_shu( char );
int q_hs( char );
void huan( PM * , PM *);
int main( void )
{
	PM pkp[5];
	shuru( pkp , 5);
	paixu( pkp , 5 );
	shuchu( pkp, 5 );
	return 0 ;
}
void huan( PM * a , PM * b)
{
	PM tmp = * a ; 
	* a =  * b ; 
	* b = tmp ; 
}
int q_hs( char  c )
{
	char hs[5]={'d','c','h','s'};  
	int i ;
    for (i = 0 ;i < 4;i ++)  
    {  
        if ( hs[i] == c)  
        {  
            return i ;  
        }  
    }  
}
int q_shu( char  c )
{
	char num[14]={'2','3','4','5','6','7','8','9','10','J','Q','K','A'};  
	int i ;
    for (i = 0 ;i < 13 ;i ++)  
    {  
        if (num[i] == c)  
        {  
            return i ;  
        }  
    }  
}
void paixu( PM pkp[] , int n)
{
	int i , j ; 
	for( i = 0 ; i < n ; i ++ )
	{
		for( j = 0 ; j < n - i - 1 ; j ++ )
		{
			int s1 = q_shu(pkp[j].sz ) ; 
			int s2 = q_shu(pkp[j+1].sz ) ;
			if( s1 > s2 )
			{
				huan( &pkp[j] , &pkp[j+1] );
			}
			if( s1 == s2 )
			{
				if( q_hs(pkp[j].hs) > q_hs( pkp[j+1].hs) )
				{
					huan( &pkp[j] , &pkp[j+1] );
				}
			}
		}
	}
}
void shuchu( PM pkp[] , int n)
{
	int i ; 
	for(i = 0 ; i < n ; i ++)
	{
		printf("%c%c ", pkp[i].sz ,pkp[i].hs);
	}
}
void shuru( PM pkp[] , int n)
{
	int i ; 
	for(i = 0 ; i < n ; i ++)
	{
		scanf("%c%c", &pkp[i].sz ,&pkp[i].hs);
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值