解题思路:把扑克牌的数字花色都分别存到两个数组,用数组下标比较大小

注意事项: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.0分

4 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论