解题思路:把扑克牌的数字花色都分别存到两个数组,用数组下标比较大小
注意事项:char型数组存不了字符10,要用‘0’+10来代替。
参考代码:
#include<stdio.h>
char shuzi[15]={0,0,'2','3','4','5','6','7','8','9','0'+10,'J','Q','K','A'};
char huase[4]={'d','c','h','s'};
int fun1(char n)
{
int i;
for(i=2;i<16;i++)
if(shuzi[i]==n)
return i;
}
int fun2(char c)
{
int i;
for(i=0;i<4;i++)
if(huase[i]==c)
return i;
}
int main(){
char b[11],t1,t2;
int i,j,k;
scanf("%s",b);
for(i=0;i<8;i+=2) 从第一个数字开始
{
for(j=i+2;j<=8;j+=2) 用第二个数字以及后面三个数字来逐一比较
{
if(fun1(b[i])>fun1(b[j])) 将数字从小到大排序
{
t1=b[i];
b[i]=b[j]; 先交换数字
b[j]=t1; 再交换花色
t2=b[i+1];
b[i+1]=b[j+1];
b[j+1]=t2;
}
else if(fun1(b[i])==fun1(b[j])) 当数字相同
{
if(fun2(b[i+1])>fun2(b[j+1])) 比较花色,从小到大排序
{
t1=b[i+1];
b[i+1]=b[j+1];
b[j+1]=t1;
t2=b[i];
b[i]=b[j];
b[j]=t2;
}
}
}
}
for(k=0;k<10;k+=2) 数字花色轮流输出
printf("%c%c ",b[k],b[k+1]);
return 0;
}
0.0分
4 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复