亚马逊 在线笔试 2014-10-9 比较扑克牌序列

2023秋招后端开发投递记录 投递记录 阅读详情

第一题:巨麻烦的一道题目,大意是比较扑克牌序列,每个序列四张牌

 

规则一:四张牌相同。自然数字大的胜出,比如3,3,3,3 < 6,6,6,6

规则二:四张牌连续。当然序列最大的那个胜出。但是有个小trick,A在这里默认表最大牌,但是如果后接2,3,4,则A表最小牌,为了获得连续序列

比如A,2,3,4 < J,Q,K,A

规则三:有三张相同。以每个序列相同牌较大的胜出。

比如3,3,3,2>2,2,2,A

规则四: 两个对子。当然以对子较大的胜出,最大的对子相同,则以次大的对子较大者胜出。

比如4,4,3,3 > 4,2,4,2

规则五:一个对子。对子较大者胜出,如果对子相同,则比较剩下较大牌,如果还相同,比较次大牌

3,3,7,4 < 3,3,7,5

规则六:如果以上皆不满足,则按照大牌>小牌比较(即从最大牌开始比较,分出高下为止)

 

如果两个序列不属于同一规则,则规则小者胜出。

如果序列一大于序列二,输出1,反之输出-1;如果序列相同,输出0。

如果发现作弊,即两副牌中某张牌数量超过5张,则输出-2。

 

OK,以上是题目描述。这个题目,个人感觉主要是读懂题意,实现起来确实也非常麻烦,但是没啥难点,但是也会搞很久。

主要是几点:

1、解析输入字符串(如果你用C、C++,会比较蛋疼)

2、适配规则逻辑(更像状态机)

3,比较逻辑

好像也没啥是吧,但是本屌丝做了N久才把Case全过。而且代码巨长,200+行,准备吃饭去了,代码稍后奉上。

昨晚有事。现在奉上我水的不忍直视的代码。

复制代码
#include <iostream>
#include <sstream>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
int change(char a)
{
    switch (a)
    {
    case 'A':
        return 14;
        break;
    case 'J':
        return 11;
        break;
    case 'Q':
        return 12;
        break;
    case 'K':
        return 13;
        break;
    default:
        return 0;
        break;
    }
}

int istype(int *a)
{
    int x = a[0];
    int ans = 1;
    int hash[15];
    memset(hash, 0, sizeof(hash));
    for (int i = 0; i < 4; i++)
    {
        hash[a[i]]++;
    }
    int eq = 1;
    int deq = 0;
    for (int i = 1; i < 15; i++)
    {
        if (hash[i] == 4)
            return 1;
        if (hash[i] == 3)
            return 3;
        if (i>1)
        {
            if (hash[i] == hash[i - 1]&&hash[i]==1)
            {
                eq++;
            }
        }

        if (eq == 4)
            return 2;

        if (hash[i] == 2)
            deq++;
        if (deq == 2)
            return 4;


    }
    if (deq == 1)
        return 5;
    if (eq == 3 && hash[2] == hash[3] && hash[3] == hash[4] &&hash[2]==1 ){
        if (a[3] == 14){
            a[3] = 1;
            sort(a, a + 4);
            return 2;
        }
    }
    return 6;
}

int cmp(int *a, int *b, int kind)
{
    if (kind == 3)
    {
        int h1[15], h2[15];
        memset(h1, 0, sizeof(h1));
        memset(h2, 0, sizeof(h2));
        int c1, c2;
        for (int i = 0; i<4; i++)
        {
            h1[a[i]]++;
            if (h1[a[i]] == 3)
                c1 = a[i];
        }
        for (int i = 0; i<4; i++)
        {
            h2[b[i]]++;
            if (h2[a[i]] == 3)
                c2 = a[i];
        }
        if (c1>c2)
            return 1;
        if (c1<c2)
            return -1;

    }
    if (kind == 4)
    {
        int h1[15], h2[15];
        memset(h1, 0, sizeof(h1));
        memset(h2, 0, sizeof(h2));
        int c1, c2;
        for (int i = 0; i<4; i++)
        {
            h1[a[i]]++;
            if (h1[a[i]] == 2)
                c1 = a[i];
        }
        for (int i = 0; i<4; i++)
        {
            h2[b[i]]++;
            if (h2[a[i]] == 2)
                c2 = a[i];
        }
        if (c1>c2)
            return 1;
        if (c1<c2)
            return -1;
    }
    for (int i = 3; i >=0; i--)
    {
        if (a[i] > b[i])
            return 1;
        else if (a[i] < b[i])
            return -1;
    }
    return 0;
}

int main() {
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */
    string a, b;
    int aa[4], bb[4];
    int hash[15];
    while (cin >> a >> b)
    {
        int ans = 0;
        int idx = 0;
        for (int i = 0; i < a.size(); i++)
        {
            int sum = 0;
            if (a[i] >= '2'&&a[i] <= '9')
            {
                sum = a[i] - '0';
                aa[idx++] = sum;
            }
            else if (a[i] == '1')
            {
                sum = 10;
                aa[idx++] = sum;
                i++;
            }
            else if (a[i] == ',')
            {
                continue;
            }
            else{
                sum = change(a[i]);
                aa[idx++] = sum;
            }

        }
        idx = 0;
        for (int i = 0; i < b.size(); i++)
        {
            int sum = 0;
            if (b[i] >= '2'&&b[i] <= '9')
            {
                sum = b[i] - '0';
                bb[idx++] = sum;
            }
            else if (b[i] == '1')
            {
                sum = 10;
                bb[idx++] = sum;
                i++;
            }
            else if (b[i] == ',')
            {
                continue;
            }
            else{
                sum = change(b[i]);
                bb[idx++] = sum;
            }
        }

        memset(hash, 0, sizeof(hash));
        for (int i = 0; i < 4; i++)
        {

            hash[aa[i]]++;
            hash[bb[i]]++;
            if (hash[aa[i]] > 4 || hash[bb[i]] > 4)
            {
                ans = -2;
                break;
            }

        }
        if (ans == -2)
        {
            cout << ans << endl;
            continue;
        }
        std::sort(aa, aa + 4);
        std::sort(bb, bb + 4);


        int ka = istype(aa);
        int kb = istype(bb);

        //for (int i = 0; i < 4; i++)
        //    cout << aa[i] << " ";
        //cout << endl;
        //for (int i = 0; i < 4; i++)
        //    cout << bb[i] << " ";
        //cout << endl;

        //cout << ka << " " << kb << endl;
        if (ka == kb)
        {
            ans = cmp(aa, bb,ka);
        }
        else{
            if (ka < kb)
                ans = 1;
            else
                ans = -1;
        }
        cout << ans << endl;
    }
    return 0;
}
复制代码

 

 

扑克牌游戏代码、控件 扑克牌游戏代码、控件<br/> 立即下载

相关推荐

Simplorer-Maxwell联合仿真速度太慢?我用这3个技巧把仿真时间砍半(附SVPWM周期与步长设置避坑)

本文详细介绍了Simplorer-Maxwell联合仿真性能优化的3个关键技巧,包括仿真步长与周期的科学配置、基于任务调度的加速技术以及模型简化与精度平衡。特别针对SVPWM参数设置提供了避坑指南,帮助工程师在不牺牲精度的情况下将仿真时间缩短50%以上,适用于电机驱动系统开发等场景。

weixin_29189381的博客 466

团队项目----德州扑克数据库设计之草稿版

  在本次团队项目中我主要是负责数据库的设计,由于知识能力有限,我一边学习相关知识,一边进行项目的实践练习。      由于能力不足,本项目使用MYSQL创建一个数据库game_db,其中包括四张表,分别是用户登录信息表(accountinfo),用户详细信息表(individual_info),用户分数表(gamescoreinfo),房间信息表(house): accountinfo表:...

weixin_30439131的博客 392

Android 13/14/15 默认授权应用权限的实现方法

Android版本修改方式实现原理13/14修改Permission.java将所有权限标记为Normal权限15修改DeviceIdleController.java + DefaultPermissionGrantPolicy.java监听应用安装并主动授权。

m0_60898338的博客 2909

亚马逊笔试题目_亚马逊在线笔试题目

亚马逊在线笔试题目Question 2 / 2Question:As you know, two operations of Stack are push and pop. Now give you two integer arrays, one is the original array beforepush and pop operations, the other one is the re...

weixin_34776645的博客 4793

通达信量化打板选股指标公式源码副图

X_2:=3*LOW;X_13:=4;X_14:=3;X_15:=2;X_16:=1;

gpzb7的博客 4483

C# 8. 在新窗口中使用chart控件波形移动显示

1. 添加新窗口 在Form1中新建button控件,名称为buttonStartWaveDisp,这样单击就能调出Form2窗口 在Form1中增加如下: private void buttonStartWaveDisp_Click(object sender, EventArgs e) { if((form2 == null) || (form2.IsDisposed == true)) { form2 = new Form2();

TrueLink的博客 1432

校招季笔试---亚马逊2014笔试题(1/4)

校招季笔试---亚马逊2014笔试题(1/4) 1.前言: 去年入学今年就得校招找工作,时间匆匆。最近一直都是各种宣讲笔试。被虐的各种惨不忍睹啊! 分享昨天亚马逊在线笔试题题。水平有限放在这里全当留着纪念吧! 2.且看题目: 2.1 第一题    我的解题思路:  1. 比较一组序列首先处理号序列每个元素,2-A 数字int类型实现icompare接口是可以直接比较...

angyuanchi3939的博客 202

别再踩坑了!QT5.15.2配置Android开发环境保姆级避坑指南(含Java8、SDK Tools版本选择)

本文提供QT5.15.2配置Android开发环境的详细避坑指南,重点解决版本锁定、SDK工具选择和QtCreator配置等常见问题。通过实测推荐的Java8、Android SDK Tools版本及NDK配置,帮助开发者高效完成环境搭建,避免隐性冲突和配置失败。

weixin_42537919的博客 237

亚马逊在线笔试(2014/10/9)

亚马逊的在线笔试也是OJ题目,跟谷歌差不多。当然比较诧异的是,其实难度也跟谷歌差不多! 第一题: 巨麻烦的一道题目,大意是比较扑克牌序列,每个序列四张牌 规则一: 四张牌相同。自然数字大的胜出,比如3,3,3,3 < 6,6,6,6 规则二: 四张牌连续。当然序列最大的那个胜出。但是有个小trick,A在这里默认表最大牌,但是如果后接2,3,4,则A表最小牌...

weixin_30567471的博客 279

记录Nvidia AGX Orin的配置日常(二)设置上电自动开机和远程桌面

因为要拿AGX作为机器人的主控板,所以需要给他设置一下通电后无需按电源键就自动开机,然后再配置一下远程桌面。

AutomaticForever的博客 1361

字符串相似度比较算法:Jaro–Winkler similarity的原理及实现

前言 在前面的文章中,笔者有对编辑距离以及Levenshtein距离进行详细的说明,其实levenshtein距离是编辑距离的其中一种定义,本文所说的Jaro距离是编辑距离的另外一种定义,它也是对两个字符串的相似度进行衡量,以得出两字符串的相似程度。下面我们一起来学习这个算法的原理以及实现吧。 标题算法定义 下面先说说Jaro distance(又称Jaro similarity),这是由Matt...

蓝天白云梦的csdn博客 1万+

亚马逊2015校招在线笔试2

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.HashMap; public class AmazonOnline2 { public static voi

u010993983的专栏 1261

SQL Server数据库备份与恢复

在 SQL Server 中,数据库备份与恢复是保障数据安全的核心操作。

zjw541806的博客 1876

【双向线性扫描+环形队列】亚马逊笔试题:扑克牌比大小

#include #include #include #include using namespace std; // #define DEBUG false // #define cout if(DEBUG) cout int cmp(vector >&a,vector >&b,int type){ switch(type){ case 1://four

一地鸡毛 722

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【3 期】面试官:this 与 super 的区别

天无绝人之路,我始终信奉,人生是不断奋斗的过程,当前条件下,不放弃,慢慢走,比较快。一面,爬楼梯,判断链表是否为环二面,面试官装逼时刻三面,刷题,想了大半天,居然问我这个算法刷题,四面,考查是否当牛马能力五面,考查是否跟企业价值观相符后续,hr。校招,本2硕9offer信息(薪资、职级等):请大家投个票重庆农商行,金融科技中心的应用研发中心,待遇不清楚 ,密薪,听说重庆天花板?六险二金,工作地点在鱼嘴长。腾讯游戏招人啦,24 届新鹅补录中,机会多多,包括但不限于游戏客户端/后端,文案关卡,市场运营等。

2301_78234743的博客 976

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

CnOpenData 线上招聘网站信息数据

CnOpenData线上招聘网站信息数据库是一个覆盖中国主流招聘平台、时间跨度长、更新频率高的劳动力市场需求侧大数据集合。本数据库汇集了,为学术界和业界提供了一扇实时观察中国劳动力市场动态的窗口。

CnOpenData_wj的博客 2620

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

第五届蓝桥杯之扑克序列

标题:扑克序列 A A 2 2 3 3 4 4, 一共4对扑克牌。请你把它们排成一行。 要求:两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌。 请填写出所有符合要求的排列中,字典序最小的那个。 例如:22AA3344 比 A2A23344 字典序小。当然,它们都不是满足要求的答案。

In my way 931
上一篇: amazon 股票的最佳买入和卖出点
下一篇: Amazon : 找出所给数字的下一个回文数
大树叶
博客等级 码龄12年 1171粉丝 664原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值