标题:扑克牌比大小
只看楼主
宇宙66
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2021-12-15
结帖率:0
已结贴  问题点数:20 回复次数:12 
扑克牌比大小
扑克牌式数字排序
扑克牌中有以下几个牌面:3 4 5 6 7 8 9 0(0代表10) J Q K A 2 S(代表司令),假定有一些数字是由如上的扑克牌牌面组成,则假设3<4<5<6<7<8<9<0<J<Q<K<A<2<S,给定一组扑克牌数,请按照从小到大的顺序进行排序!
例如:给定数字序列234  589 523  KS2 K2Q  2KS J98 0KA,则排序后的结果为:589<523<0KA<J98<K2Q<KS2<234<2KS,演示代码稍后会发放!
搜索更多相关主题的帖子: 数字 给定 大小 排序 扑克牌 
2021-12-15 17:58
宇宙66
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2021-12-15
得分:0 
有人会这个嘛
2021-12-15 20:37
apull
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:5 
程序代码:

#include <stdio.h>
#include <stdlib.h>

int getint(char c)
{
    if (c >= '3' && c <= '9')
    {
        return c - '0';
    }
    switch (c)
    {
    case '0':
        return 10;

    case 'J':
        return 11;

    case 'Q':
        return 12;

    case 'K':
        return 13;

    case 'A':
        return 14;

    case '2':
        return 15;

    case 'S':
        return 16;
    }
    return 0;
}

int mystrcmp(const char *s1, const char *s2)
{
    int cmp = 0;
    while (*s1)
    {
        cmp = getint(*s1) - getint(*s2);
        if (cmp != 0)
            return cmp;
        s1++;
        s2++;
    }

    return cmp;
}

int main()
{
    char pk[8][4] = {"234", "589", "523", "KS2", "K2Q", "2KS", "J98", "0KA"};
    int pkIndex[8] = {0, 1, 2, 3, 4, 5, 6, 7};

    for (int i = 0; i < 7; i++)
    {
        for (int j = i; j < 8; j++)
        {
            if (mystrcmp(pk[pkIndex[i]], pk[pkIndex[j]]) > 0) //对调字符串,拿索引打捷路。
            {
                int t = pkIndex[i];
                pkIndex[i] = pkIndex[j];
                pkIndex[j] = t;
            }
        }
    }
    for (int i = 0; i < 8; i++)
    {
        printf("%s ", pk[pkIndex[i]]);
    }
    printf("\n");

    return 0;
}
2021-12-15 23:15
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:5 
就当是密文转明文字符串排序
2021-12-16 05:14
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:5 
看不懂,题目只给出了 单个字符 的比较规则。
但比如 3456 与 456 比较谁大谁小,是像字符串那样依次比较,于是 3456<456,还是把它看成十五进制比较数值,于是 3456>456 ???

[此贴子已经被作者于2021-12-16 08:42编辑过]

2021-12-16 08:35
宇宙66
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2021-12-15
得分:0 
回复 5楼 rjsp
就是三个数跟三个数进行比较,不用四个数跟三个数比较
2021-12-16 08:50
宇宙66
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2021-12-15
得分:0 
回复 3楼 apull
谢谢我看看
2021-12-16 08:51
宇宙66
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2021-12-15
得分:0 
回复 3楼 apull
请问如果让我们自己输入几个数比较这些大小,这应该怎么写
2021-12-16 08:57
diycai
Rank: 8Rank: 8
等 级:贵宾
威 望:19
帖 子:147
专家分:895
注 册:2021-5-18
得分:5 
程序代码:
#include <stdio.h>
#include <string.h>
void main()
{
    int i, j, n;
    int map[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,13,1,2,3,4,5,6,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,11,0,0,0,0,0,10,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,};
    char result[4096][4] = {0};
    int count[4096] = {0};
    char pk[1024][4];
    printf("请输入序列个数:");
    scanf("%d", &n);
    printf("请输入所有序列:\n");
    for (i=0; i<n; i++)
    {
        scanf("%s", pk[i]);
    }
    for (i=0; i<n; i++)
    {
        j = (map[pk[i][0]]<<8) | (map[pk[i][1]]<<4) | (map[pk[i][2]]);
        memcpy(result[j], pk[i], 4);
        count[j]++;
    }
    for (i=0; i<4096; i++)
    {
        if (result[i][0])
        {
            for (j=0; j<count[i]; j++)
            {
                printf("%s ", result[i]);
            }
        }
    }
    printf("\n");
}
2021-12-16 11:55
宇宙66
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2021-12-15
得分:0 
回复 9楼 diycai
没怎么看懂
2021-12-16 14:59



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-507883-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018591 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved