| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4816 人关注过本帖
标题:判断 5 张牌是不是顺子,这里有两种方法,哪种更优一些?
只看楼主 加入收藏
muyoucumian
Rank: 3Rank: 3
等 级:等待验证会员
帖 子:80
专家分:126
注 册:2014-8-30
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
判断 5 张牌是不是顺子,这里有两种方法,哪种更优一些?
问题:用户输入5张牌,程序判断这5张牌是不是顺子。
牌点数由小到大排列:2.3.4.5.6.7.8.9.10.J.Q.K.A。
比如56789是顺子。
A是最大的牌,不能和最小的2连起来组成顺子,比如a.2.3.4.5不是顺子。

这个问题我google了一下,发现大部分答案都是先排序再判断。
现在已知另一种方法:
建立一个数组rank[13],并根据5张牌的点数花色为其赋值,使rank[i]为j代表点数为i的牌有j张,例如rank[3] = 2代表点数为3的牌有2张。
示例代码:
    int rank[13] = {0};
    for (i = 0; i < 5; i ++){
        rank[hand[i][0]] ++;    //hand[5][2]存储的是5张牌的点数和花色
然后根据rank[13]来判断是否顺子。
示例代码:
    int i;
    int num_consec = 0;
    bool straight = false;
    for (i = 0; rank[i] == 0; i ++);
        while (i < 13 && rank[i] > 0){
            num_consec ++;
            i ++;
        }
    if (num_consec == 5){
        straight = true;
        return;
    }

请问这种方法相比排序后判断的方法哪一种方法更优一些呢?或者在牌的数量增加时,这种方法有什么明显的弊端吗?
PS:我目前使用这种方法是因为C语言里的qsort()函数里面的参数似乎涉及到指针,我还看不太懂。
搜索更多相关主题的帖子: google 最大的 用户 
2014-09-05 18:40
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:20 
“或者在牌的数量增加时,这种方法有什么明显的弊端吗?”
简单说说:
首先中秋节快乐!
简单的程序不要求时间的程序,几乎哪种方法都是可以的,只要完善了就行,可改性要好
对于复杂的数据处理 必须要求程序有快速性
例如啊对于4000W 个数据里面选出来从大到小的第4000个大小的那个数据,普通算法什么冒泡啦选择啦 都要算6个小时以上
但是有种方法只要数10秒左右!
所以大数据来说我们必须选择时间开销小,空间开销小。
拿你这个算法来说吧 我就评价一点:用rank[13]表示各个点数的张数
如果假设我们进行扩展,到多少呢 假设到100W个不同的点数吧
你这个空间开销肯定受不了

2014-09-05 18:49
muyoucumian
Rank: 3Rank: 3
等 级:等待验证会员
帖 子:80
专家分:126
注 册:2014-8-30
收藏
得分:0 
回复 2 楼 erty1001
说的好,我太赞同了
2014-09-05 19:21
veast
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2017-3-16
收藏
得分:0 
回复 楼主 muyoucumian
哇楼主那个while循环是在for之外的啊,看了半天怪怪的,前面的for(int i = 0;rank[i] == 0;i++);是单独的用来找到第一个存在的rank[i]
2017-03-16 15:53
veast
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2017-3-16
收藏
得分:0 
回复 楼主 muyoucumian
哇楼主那个while循环是在for之外的啊,看了半天怪怪的,前面的for(int i = 0;rank[i] == 0;i++);是单独的用来找到第一个存在的rank[i]
2017-03-16 15:53
快速回复:判断 5 张牌是不是顺子,这里有两种方法,哪种更优一些?
数据加载中...
 
   



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

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