问题描述
扑克牌排序:构造扑克牌数组,对扑克牌进行排序。排序原则如下:数字从小到大是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。
输入五张牌(表示黑桃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。
样例输出
与上面的样例输入对应的输出。
例:
例:
![](https://i-blog.csdnimg.cn/blog_migrate/ce4d4d397da8fbb63246d48b8e9b42a4.png)
数据规模和约定
输入数据中每一个数的范围。
//---------C-------------
#include<stdio.h>
#include<string.h>
int number[1000];
char type[1000];
int Fun(char string[])
{
int Number=0,Type=0;
int i=0;
while(string[i])
{
if(string[i]>='2' && string[i]<='9')
{
number[Number]=string[i]-'0';
type[Number]=string[i+1];
i+=2;
}
else if(string[i]=='1' && string[i+1]=='0')
{
number[Number]=10;
type[Number]=string[i+2];
i+=3;
}
else if(string[i]=='J')
{
number[Number]=11;
type[Number]=string[i+1];
i+=2;
}
else if(string[i]=='Q')
{
number[Number]=12;
type[Number]=string[i+1];
i+=2;
}
else if(string[i]=='K')
{
number[Number]=13;
type[Number]=string[i+1];
i+=2;
}
else
{
number[Number]=14;
type[Number]=string[i+1];
i+=2;
}
if(type[Number]=='d')
type[Number]=1;
if(type[Number]=='c')
type[Number]=2;
if(type[Number]=='h')
type[Number]=3;
if(type[Number]=='s')
type[Number]=4;
Number++;
}
type[Number]='\0';
/* for(i=0;i<Number;i++)
{
printf("%d %c\n",number[i],type[i]);
}
*/ return Number;
}
void paixu(int count)
{
int i,j,tempNum;
char tempType;
for(i=0;i<count-1;i++)
{
for(j=i+1;j<count;j++)
{
if(number[i]>number[j])
{
tempNum=number[i];
number[i]=number[j];
number[j]=tempNum;
tempType=type[i];
type[i]=type[j];
type[j]=tempType;
}
if(number[i]==number[j])
{
if(type[i]>type[j])
{
tempNum=number[i];
number[i]=number[j];
number[j]=tempNum;
tempType=type[i];
type[i]=type[j];
type[j]=tempType;
}
}
}
}
}
void print(int count)
{
int i;
for(i=0;i<count;i++)
{
if(number[i]==11)
printf("J");
else if(number[i]==12)
printf("Q");
else if(number[i]==13)
printf("K");
else if(number[i]==14)
printf("A");
else
printf("%d",number[i]);
if(type[i]==1)
printf("d ");
if(type[i]==2)
printf("c ");
if(type[i]==3)
printf("h ");
if(type[i]==4)
printf("s ");
}
}
int main()
{
int count;
char string[5000];
scanf("%s",string);
memset(number,0,sizeof(number));
count=Fun(string);
paixu(count);
print(count);
return 0;
}
//-----------C++----------------
/*问题描述
扑克牌排序:构造扑克牌数组,对扑克牌进行排序。
排序原则如下:数字从小到大是2-10、J、Q、K和A,
花色从小到大是方块(diamond)、梅花(club)、红桃(heart)、黑桃(spade)。
两张牌比较时先看数字,数字相同时看花色。要求对输入的扑克牌进行从小到大排序。
输入五张牌(表示黑桃2、红桃3、黑桃3、方块A和梅花J): 2s3h3sAdJc
输出结果应为:2 s 3 h 3 s J c A d数组长度固定为5。
*/
#include<iostream>
#include<stdio.h>
using namespace std;
int main(){
char arry[10];
char temp1,temp2;
for(int i=0;i<10;i++){
arry[i]=getchar();
}
for(int i=0;i<10;i++){
switch(arry[i]){
case 'J':
arry[i]='a';
break;
case 'Q':
arry[i]='b';
break;
case 'K':
arry[i]='c';
break;
case 'A':
arry[i]='d';
break;
case 'd':
arry[i]='e';
break;
case 'c':
arry[i]='f';
break;
case 'h':
arry[i]='g';
break;
case 's':
arry[i]='h';
break;
default:
break;
}
}
for(int i=0;i<5;i++){ //冒泡排序
for(int j=0;j<8;j=j+2){
if(arry[j]>arry[j+2]){
temp1=arry[j];
temp2=arry[j+1];
arry[j]=arry[j+2];
arry[j+1]=arry[j+3];
arry[j+2]=temp1;
arry[j+3]=temp2;
}else if(arry[j]==arry[j+2]){
if(arry[j+1]>arry[j+3]){
temp1=arry[j];
temp2=arry[j+1];
arry[j]=arry[j+2];
arry[j+1]=arry[j+3];
arry[j+2]=temp1;
arry[j+3]=temp2;
}
}
}
}
for(int i=0;i<10;i++){
switch(arry[i]){
case 'a':
arry[i]='J';
break;
case 'b':
arry[i]='Q';
break;
case 'c':
arry[i]='K';
break;
case 'd':
arry[i]='A';
break;
case 'e':
arry[i]='d';
break;
case 'f':
arry[i]='c';
break;
case 'g':
arry[i]='h';
break;
case 'h':
arry[i]='s';
break;
default:
break;
}
}
for(int i=0;i<10;i++){
if(i!=0&&i%2==0){
cout<<" ";
}
cout<<arry[i];
}
return 0;
}