华为机试—5张扑克牌的组成

一副牌中发五张扑克牌给你:让你判断数字的组成:

有以下几种情况:

1:四条:即四张一样数值的牌(牌均不论花色)

2:三条带 一对

3:三条带两张不相同数值的牌

4:两对

5:顺子 包括 10,J,Q,K,A

6:什么都不是

7:只有一对。

c

#include<iostream>
#include<string>
#include<cstdlib>
using namespace std;
int cmp(const void *a,const void *b)
{
    return *(int*)a-*(int*)b;
}
int main()
{
    string str;
    cin>>str;
    int flag;
    int num[5],m=0;
    for(int i=0;i<str.size()&&m<5;i++)
    {
        if(str[i]>=‘2‘&&str[i]<=‘9‘)
            num[m++]=str[i]-‘0‘;
        else if(str[i]==‘1‘&&str[i+1]==‘0‘)
        {
            num[m++]=10;
            i++;
        }
        else if(str[i]==‘J‘||str[i]==‘j‘)
            num[m++]=11;
        else if(str[i]==‘Q‘||str[i]==‘q‘)
            num[m++]=12;
        else if(str[i]==‘K‘||str[i]==‘k‘)
            num[m++]=13;
        else if(str[i]==‘A‘||str[i]==‘a‘)
            num[m++]=14;
        else
        {
            cout<<"输入错误"<<endl;
            return 0;
        }
    }
    qsort(num,5,sizeof(int),cmp);
    if(num[0]==num[3]||num[1]==num[4])
        flag=1;
    else if((num[0]==num[2]&&num[3]==num[4])||(num[2]==num[4]&&num[0]==num[1]))
        flag=2;
    else if((num[0]==num[2]&&num[3]!=num[4])||(num[2]==num[4]&&num[0]!=num[1])||num[1]==num[3])
        flag=3;
    else if((num[0]==num[1]&&num[2]==num[3])||(num[0]==num[1]&&num[3]==num[4])||(num[1]==num[2]&&num[3]==num[4]))
        flag=4;
    else if(num[0]==num[1]||num[1]==num[2]||num[2]==num[3]||num[3]==num[4])
        flag=7;
    else if(num[4]-num[0]==4)
        flag=5;
    else
        flag=6;
    cout<<flag<<endl;
    return 0;
}

java

import java.util.Arrays;
import java.util.Scanner;

public class pukeNum {

    public static void main(String[] args) {

        Scanner s = new Scanner(System.in);
        String str = s.nextLine();

        int flag;
        int []num= new int[5];
        int m=0;
        for(int i=0;i<str.length()&&m<5;i++)
        {
            if(str.charAt(i)>=‘2‘&&str.charAt(i)<=‘9‘)
                num[m++]=str.charAt(i)-‘0‘;
            else if(str.charAt(i)==‘1‘&&str.charAt(i+1)==‘0‘)
            {
                num[m++]=10;
                i++;
            }
            else if(str.charAt(i)==‘J‘||str.charAt(i)==‘j‘)
                num[m++]=11;
            else if(str.charAt(i)==‘Q‘||str.charAt(i)==‘q‘)
                num[m++]=12;
            else if(str.charAt(i)==‘K‘||str.charAt(i)==‘k‘)
                num[m++]=13;
            else if(str.charAt(i)==‘A‘||str.charAt(i)==‘a‘)
                num[m++]=14;
            else
            {
                System.out.println("输入错误");
                return;
            }
        }

        Arrays.sort(num);

        if(num[0]==num[3]||num[1]==num[4])
            flag=1;
        else if((num[0]==num[2]&&num[3]==num[4])||(num[2]==num[4]&&num[0]==num[1]))
            flag=2;
        else if((num[0]==num[2]&&num[3]!=num[4])||(num[2]==num[4]&&num[0]!=num[1])||num[1]==num[3])
            flag=3;
        else if((num[0]==num[1]&&num[2]==num[3])||(num[0]==num[1]&&num[3]==num[4])||(num[1]==num[2]&&num[3]==num[4]))
            flag=4;
        else if(num[0]==num[1]||num[1]==num[2]||num[2]==num[3]||num[3]==num[4])
            flag=7;
        else if(num[4]-num[0]==4)
            flag=5;
        else
            flag=6;

        System.out.println(flag);

    }

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-13 01:57:11

华为机试—5张扑克牌的组成的相关文章

[华为机试真题]66.单词搜索

题目 代码 /*--------------------------------------- * 日期:2015-07-06 * 作者:SJF0115 * 题目:WordSearch * 来源:华为机试真题 -----------------------------------------*/ #include <iostream> #include <string> #include <vector> #include <stack> #include

华为机试正式版(西安c/c++/java),今天下午去机试的题目,新鲜出炉了!

以下题目都是回忆的,题目都很简单, 大家有些基础就可以参加!(语言可以是c/c++,也可以是java的) 题目一(60分): 字符串操作, 将小写转换成大写, 将大写转化为小写, 数字的不做转换 例如, 输入:aBcD12 输出:AbCd12 题目二(100分): 将输入的字符串按照规定重新排序,如果字符串长度为奇数, 则中间的字符保持不变, 中间字符左侧降序排列, 右侧字符按照升序排列, 如果字符串长度为偶数,则左半侧字符降序排列,右半侧字符则按照升序排列 例如, 输入:ab5de 输出:ba

华为机试 --- 求最大三位数

题目:输入10位0-9数字,取其中三位不同数字组合,求组合出来的最大三位数. 如输入 1 2 3 4 5 6 7 8 9 0,组合出来987最大. 测试代码如下: #include <stdio.h> #include <stdlib.h> int IsSame(int *a, int num); int main() { int i=0; int j=0; int a[10]={0}; int input =0; int length =0; int temp=0; for (i

[华为机试真题][2015]65.和尚挑水

题目 某寺庙里7个和尚:轮流挑水,为了和其他任务不能冲突,各人将有空天数列出如下表: 和尚1: 星期二,四; 和尚2: 星期一,六; 和尚3: 星期三,日; 和尚4: 星期五; 和尚5: 星期一,四,六; 和尚6: 星期二,五; 和尚7: 星期三,六,日; 请将所有合理的挑水时间安排表 思路 回朔法求解 回朔法即每进行一步,都试图在当前部分解的基础上扩大该部分解.扩大时,首先检查扩大后是否违反了约束条件,若不违反,则扩大之,然后继续在此基础上按照类似的方法进行,直至成为完整解:若违反,则放弃该步

2014华为机试西安地区B组试题

2014华为机试西安地区B组试题 题目一.亮着点灯的盏数 一条长廊里依次装有n(1≤n≤65535)盏电灯,从头到尾编号1.2.3.-n-1.n.每盏电灯由一个拉线开关控制.开始,电灯全部关着. 有n个学生从长廊穿过.第一个学生把号码凡是1的倍数的电灯的开关拉一下:接着第二个学生把号码凡是2的倍数的电灯的开关拉一下:接着第三个学生把号码凡是3的倍数的电灯的开关拉一下:如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下.n个学生按此规定走完后,长廊里电灯有几盏亮着. 注:电灯数和学生

[华为机试]输入数字的汉语拼音,每个拼音的首字母大写。输出该数字的阿拉伯数字。

//输入数字的汉语拼音,每个拼音的首字母大写.输出该数字的阿拉伯数字. //JiuBaiJiuShiJiu -> 999 #include<stdio.h> #include<string.h> int result = 0; void add(int n,char wei[]) { if(strcmp(wei,"Wan") == 0) result = result + n * 10000; else if(strcmp(wei,"Qian&q

华为机试(2)

简单题   题目描述  输入一个字符串,统计其出现频率最高的字符,并输出.若存在两个字符出现频率相同,则输出字典序较小的那一个   输入描述  :一个字符串,保证没有空格,以回车符结束,字符串长度<=20   输出描述  :一个字符   输入样例 :aabbaabb  输出样例  :a  解题思路:做一个频率数组来统计所有字符的出现频率,机试时候不会有汉字输入,因此只考虑输入是ASCII编码的情况. #include<string> #include<iostream> us

华为机试—介绍、剖析、建议

一.华为机试介绍 1.大致介绍 时间:120分钟 环境:Visual Studio(去年是vs2005).Visual C++.VC 6.0.Eclipse(Java) 题量:共3题 初级题--60分--3组测试数据 中级题--100分--5组测试数据 高级题--160分--8组测试数据 注:初级题和中级题为必答题,高级题为附加题. 提交次数:每题最多5次 评判方式:按通过测试数据组数给分,每通过一组得20分 2.考试说明 这里有一个老版的机试考试说明,供大家参考: C/C++,JAVA机试流程

华为机试(A)

二叉树遍历        答题时间: 00 小时 03 分 11 秒 描述:  二叉树的前序.中序.后序遍历的定义: 前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树: 中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树: 后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根. 给定一棵二叉树的前序遍历和中序遍历,求其后序遍历(提示:给定前序遍历与中序遍历能够唯一确定后序遍历). 题目类别:  树  难度:  中级  运行时间限制: 无限制 内存限