首页 > 试题广场 >

打牌

[编程题]打牌
  • 热度指数:12999 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
牌只有1到9,手里拿着已经排好序的牌a,对方出牌b,用程序判断手中牌是否能够压过对方出牌。  规则:出牌牌型有5种   [1]一张 如4 则5...9可压过 [2]两张 如44 则55,66,77,...,99可压过 [3]三张 如444 规则如[2] [4]四张 如4444 规则如[2] [5]五张 牌型只有12345 23456 34567 45678 56789五个,后面的比前面的均大。

输入描述:
输入有多组数据。
每组输入两个字符串(字符串大小不超过100)a,b。a字符串代表手中牌,b字符串代表出的牌。


输出描述:
压过输出YES 否则NO。
示例1

输入

12233445566677
33

输出

YES
#include <cstdio>
#include <cstring>
#include <memory>

const int N = 100;

int main()
{
	char a[N], b[6];
	int num[10];
	while (scanf("%s%s", a, b) != EOF)
	{
		memset(num, 0, sizeof(num));
		int len_a = strlen(a);
		int len_b = strlen(b);
		bool flag = false;
		for (int i = 0; i < len_a; i++)
		{
			num[a[i] - '0']++;
		}
		if (len_b < 5)
		{
			for (int i = b[0] - '0' + 1; i < 10; i++)
			{
				if (num[i] >= len_b)
				{
					flag = true;
					break;
				}
			}
		}
		else
		{
			for (int i = b[0] - '0' + 1; i < 6; i++)
			{
				if (num[i] > 0 && num[i + 1] > 0 && num[i + 2] > 0
					&& num[i + 3] > 0 && num[i + 4] > 0)
				{
					flag = true;
					break;
				}
			}
		}
		if (flag)
			printf("YES\n");
		else
			printf("NO\n");
	}
	return 0;
}

发表于 2017-06-06 14:05:59 回复(1)
# include<stdio.h>
# include<string.h>

int main()
{
    //手中牌
    char str[101];
    //待处理的牌
    char card[10];
    //计数数组,代表每个数字有多少个,‘0’记录在arr[0]中
    int arr[10];

    while(scanf("%s",str)!=EOF)
    {
        scanf("%s",card);
        int s_len=strlen(str);
        int c_len=strlen(card);

        for(int i=0;i<10;i++)
        {
            arr[i]=0;
        }

        //'0'的ascii码表的十进制是48
        for(int i=0;i<s_len;i++)
        {
            arr[str[i]-48]++;
        }

        //情况1
        if(c_len==1)
        {
            //flag==0为NO
            int flag=0;
            for(int i=0;i<10;i++)
            {
                if(arr[i]>0&&i>card[0]-48)
                {
                    flag=1;
                    break;
                }
            }
            if(flag==1) printf("YES\n");
            else    printf("NO\n");
        }

        //情况2
        if(c_len==2)
        {
            //flag==0为NO
            int flag=0;
            for(int i=0;i<10;i++)
            {
                if(arr[i]>1&&i>card[0]-48)
                {
                    flag=1;
                    break;
                }
            }
            if(flag==1) printf("YES\n");
            else    printf("NO\n");
        }

        //情况3
        if(c_len==3)
        {
            //flag==0为NO
            int flag=0;
            for(int i=1;i<10;i++)
            {
                if(arr[i]>2&&i>card[0]-48)
                {
                    flag=1;
                    //printf("%d   %d\n",arr[i],i);
                    break;
                }
            }
            if(flag==1) printf("YES\n");
            else    printf("NO\n");
        }

        //情况4
        if(c_len==4)
        {
            //flag==0为NO
            int flag=0;
            for(int i=0;i<10;i++)
            {
                if(arr[i]>3&&i>card[0]-48)
                {
                    flag=1;
                    break;
                }
            }
            if(flag==1) printf("YES\n");
            else    printf("NO\n");
        }

        //情况5
        if(c_len==5)
        {
            //flag==0为NO
            int flag=0;
            for(int i=2;i<=5;i++)
            {
                //连续5个数字,并且要求数字数量大于1
                if(arr[i]>0&&arr[i+1]>0&&arr[i+2]>0&&arr[i+3]>0&&arr[i+4]>0&&
                   i>card[0]-48)
                {
                    flag=1;
                    break;
                }
            }
            if(flag==1) printf("YES\n");
            else    printf("NO\n");
        }
    }
    return 0;
}


发表于 2018-07-17 01:20:46 回复(1)
#include<iostream>
#include<string>
using namespace std;
int main()
{
    int n, i, count[10];
    string a, b;
    bool flag = false;
    while(cin >> a >> b)
    {
        for(i = 0;i < 10;++i)
            count[i] = 0;
        for(i = 0;i < a.size();++i)  //统计数量
            ++count[a[i] - '0'];
        if(b.size() < 5)             //前四个一种情况,看数量
        {
            for(i = b[0] + 1 -'0';i < 10;++i)
            {
                if(count[i] >= b.size())
                {
                    flag = true;
                    break;
                }
            }
        }
        else                        //顺子,看连续
        {
            n = 0;
            for(i = b[1] - '0';i < 10;++i)
            {
                if(count[i] != 0)
                    ++n;
                else
                    n = 0;
                if(n == 5)
                {
                    flag = true;
                    break;
                }
            }     
        }
        if(flag)               
           cout << "YES" << endl;
        else
           cout << "NO"  <<endl;
    }//while
    return 0;
} 

编辑于 2019-03-03 04:37:43 回复(0)
#include<stdio.h> #include<string.h> //将每张牌的数量进行统计,分为2中牌型进行求解 int case1(int a[],int n,int length){     int i;     for(i=8;i>=0;i--){  //i+1为牌的牌面         if(n<i+1&&length<=a[i])             return 1;     }     return 0; } int case2(int a[],int n){     int i;     for(i=8;i>=4;i--){         if(i+1>n&&a[i]>0&&a[i-1]>0&&a[i-2]>0&&a[i-3]>0&&a[i-4]>0)             return 1;     }     return 0; }
int main(){     char b[100],c[100];     int result,a[9]={0},i,lengthb,lengthc;     while(scanf("%s%s",b,c)!=EOF){             lengthb=strlen(b);             lengthc=strlen(c);         for(i=0;i<lengthb;i++)             a[b[i]-48-1]++;         if(lengthc<=4)             result=case1(a,c[0]-48,lengthc);         else             result=case2(a,c[4]-48);         if(result==1)             printf("YES\n");         else             printf("NO\n");     } }

编辑于 2019-02-19 21:49:08 回复(2)
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
//数字转字符串 常用
string itoa(int i){
    stringstream s;
    s << i;
    return s.str();
}
//***1、2、3、4种情况
bool matching(string a, int _b, int type) {
    string _str;
    for (int i = _b + 1; i <= 9; ++i){
        _str = "";
        for (int j = 0; j < type; ++j){
            _str += itoa(i);
        }
        if (a.find(_str) != a.npos)
            return true;
    }
    return false;
}
int main(){
    string a, b;
    cin >> a >> b;
    int type = b.size();
    bool result = false;
    //判断是哪种类型的出牌
    int _b = b[0] - '0';  //char 转成 int
    //单独***
    if (type == 5){
        string _str;
        bool flag = false;
        if (_b <= 5){
            for (int i = _b + 1; i <= 5; ++i){
                int _c = i;
                int j = 0;
                for (; j < 5; ++j, ++_c){
                    if (a.find(itoa(_c)) == a.npos){  //假如有一个数字没找到就直接跳出这一循环
                        break;
                    }
                }
                if (j == 5) //表示联系的5个数字都找到
                    flag = true;
            }
            //标志为真 则查找成功
            if (flag)
                result = true;
        }
    }
    else {
        result = matching(a, _b, type);
    }
    if (result)
        cout << "YES";
    else
        cout << "NO";
    return 0;
}

发表于 2018-02-07 18:07:41 回复(0)
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;

int main(void)
{
    string a,b;
    
    while(cin >> a >> b)
    {
        sort(a.begin(),a.end());
        
        while(1)//这个循环是为了防止b + 1后在a中没找到,继续加1直到找到能压过b的字符串
        {
            if(b[0] == '9')
            {
                cout << "NO" << endl;//当为9的时候牌已经最大了,压不过
                break;
            }

            for(int i = 0;i < b.size();i++)//更新比b大的字符串
                b[i] += 1;
            
//find(b)函数用于寻找b字符串并返回对应字符串的首字符的数组下标,没找到则返回一个npos
            if(a.find(b) != a.npos)//对子或叠牌的情况
            {
                cout << "YES" << endl;
                break;
            }

            string c = a;
            unique(c.begin(), c.end());//去掉重复的相邻字符,前提是已经排序好的字符串

            if(c.find(b) != c.npos)//顺子的情况如:12345
            {
                cout << "YES" << endl;
                break;
            }
        }
    }
    return 0;
}






























发表于 2021-02-16 14:34:50 回复(0)
import java.util.Scanner;

public class Main{
    
    public static void main(String[] args)  {
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNext()) {
            String str1 = scanner.next();
            String str2= scanner.next();
            int[] nums = new int[str2.length()];
            for(int i = 0; i < str2.length(); i++) {
                nums[i] = ((int)str2.charAt(i) - 48);
            }
            if(nums.length == 5){
                int i = 0, j = 1;
                while(i < 5) {
                    while(!(str1.contains(String.valueOf(nums[i] + j))) && j != 5) {
                        i = 0;
                        j++;
                    }
                    if(j == 5) {
                        System.out.println("NO");
                        break;
                    }
                    if(i < 4) i++;
                    else {
                        System.out.println("YES");
                        break;
                    }
                }
            }else {
                int i = 0, j = 0, sum = Integer.parseInt(str2);
                if(str2.length() == 4) i = 1111;
                if(str2.length() == 3) i = 111;
                if(str2.length() == 2) i = 11;
                if(str2.length() == 1) i = 1;
                for(j = 0; j < 8; j++) {
                    sum += i;
                    if(str1.contains(String.valueOf(sum))) {
                        System.out.println("YES");
                        break;
                    }
                }
                if(j == 8)System.out.println("NO");
            }
        }
    }
}
发表于 2020-03-07 19:05:11 回复(0)
#include<stdio.h>
#include<string.h>
int main(){
    int a[20];
    memset(a,0,sizeof(a));
    char ans[100];
    gets(ans);
    int le=strlen(ans);
    for(int i=0;i<le;i++)
        a[ans[i]-48]++;//经大神指点,字符串和数字以‘0’-48=0转换
    char b[6];
    gets(b);
    int l=strlen(b);
    int i=b[0]-48+1;
    switch(l){
        case 1:
            if(b[0]-48==9)
                printf("NO");
            else{
                for(i=b[0]-48+1;i<10;i++){
                    if(a[i]){
                        printf("YES");
                        break;
                    }
                }
                if(i==10)
                    printf("NO");
            }
              break;
          case 2:
              if(b[0]-48==9)
                printf("NO");
            else{
                for(i=b[0]-48+1;i<10;i++){
                    if(a[i]>1){
                        printf("YES");
                        break;
                    }
                }
                if(i==10)
                    printf("NO");
            }
            break;
        case 3:
              if(b[0]-48==9)
                printf("NO");
            else{
                for(i=b[0]-48+1;i<10;i++){
                    if(a[i]>2){
                        printf("YES");
                        break;
                    }
                }
                if(i==10)
                    printf("NO");
            }
            break;
        case 4:
              if(b[0]-48==9)
                printf("NO");
            else{
                for(i=b[0]-48+1;i<10;i++){
                    if(a[i]>3){
                        printf("YES");
                        break;
                    }
                }
                if(i==10)
                    printf("NO");
            }
            break;
        case 5:
              if(b[0]-48==5)
                printf("NO");
            else{
                for(i=b[0]-48+1;i<6;i++){
                    if(a[i]&&a[i+1]&&a[i+2]&&a[i+3]&&a[i+4]){
                        printf("YES");
                        break;
                }        
            }
                if(i==6)
                    printf("NO");
            }
            break;
    }
    return 0;
}


发表于 2019-01-23 18:26:40 回复(0)

#include<bits/stdc++.h> #define ll long long #define len 5 using namespace std; string a,b; int change[105]; int main() {         std::ios::sync_with_stdio(false);     while(cin>>a>>b)     {
        for(int i=0;i<a.size();i++)         {             change[a[i]-'0']++;         }
        if(b.size()<5)         {             for(int i=0;i<a.size();i++)             {                 if(a[i]>b[0]&&change[a[i]-'0']>=b.size())                 {                     cout<<"YES"<<endl;                     break;                 }                 if(i==a.size()-1)                     cout<<"NO"<<endl;             }         }         else         {
            for(int j=0,i;j<a.size()-4;j++)             {                 i=a[j]-'0';                 if(a[j]>b[0]&&change[i]>0&&change[i+1]>0&&change[i+2]>0&&change[i+3]>0&&change[i+4]>0)                 {                     cout<<"YES"<<endl;                     break;                 }                 if(j==a.size()-5)                     cout<<"NO"<<endl;             }         }         memset(change,0,sizeof(change));
    }
    return 0;
}

发表于 2018-05-24 12:51:25 回复(0)
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int a[10]= {0};
int main()
{
    string str,s;
    while( cin>>str>>s)
    {
        for(int i=0; i<str.size(); i++)
        {
            int num=str[i]-48;
            a[num]++;
        }
        if(s.size()<=4)
        {
            int num=s[0]-48;
            int i;
            for( i=num+1; i<=9; i++)
            {
                if(a[i]>=s.size())
                {
                    cout<<"YES"<<endl;
                    break;
                }
            }
            if(i>9) cout<<"NO"<<endl;
        }
        else if(s.size()==5)
        {
            int num=s[0]-48;
            int flag=0,i;
            for( i=num+1; i<=9; i++)
            {
                if(a[i]>=1)
                {
                    flag++;
                    if(flag>=5)
                    {
                        cout<<"YES"<<endl;
                        break;
                    }

                }
                else
                    flag=0;
            }
            if(i>9) cout<<"NO"<<endl;
        }
    }
}

发表于 2018-03-24 21:22:52 回复(0)
利用hash数组标记再比较
#include <iostream>
#include<string.h>
using namespace std;
int main()
{
    char a[100],b[5];
    while(cin>>a>>b){
        int hash[10]={0};
        int x=strlen(a);
        int y=strlen(b);
        for(int i=0;i<x;i++)
        hash[(a[i]-'0')]++;
        int count=0;
        int flag=b[0]-'0';
        if(y<5){
            
                for(int i=flag+1;i<10;i++){
                    if(hash[i]>=y)
                    {
                        count=1;
                        break;
                    }
                }
            }
        else{
            for(int i=flag;i+5<10;i++){
                if(hash[i+1]>=1&&hash[i+2]>=1&&hash[i+3]>=1&&hash[i+4]>=1&&hash[i+5]>=1)
                    count=1;
            }    
        }
        if(count==1)
        cout<<"YES"<<endl;
        else
        cout<<"NO"<<endl;
    }
    return 0;
}

发表于 2018-03-24 13:57:52 回复(0)
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{   char a[100],b[100],c[100],d[100];
    for(int i=0;i<100;i++){
        a[i]=0;
        b[i]=0;
        c[100]=0;
        d[100]=0;
    }//初始化
    scanf("%s",a);
    scanf("%s",b);
    int numa=0,numb=0;
    for(int i=0;a[i]!='\0';i++){
        if(a[i]>='1'&&a[i]<='9')
        numa++;
    }
    for(int i=0;b[i]!='\0';i++){
        if(b[i]>='1'&&b[i]<='9')
        numb++;
    } //字母个数正确
    if(numb==1){
        if(a[numa-1]>b[0])//设计精髓,最后一个大于即可以
        printf("YES\n");
        else printf("NO\n");
    }
    else if(numb==2){
        int number1=0;
        for(int i=1;i<numa;i++){
            if(a[i]==a[i-1])
            c[number1++]=a[i];
        }
        if(c[number1-1]>b[0])
        printf("YES");
        else printf("NO");
    }
    else if(numb==3){
        int number1=0;
        for(int i=1;i<numa;i++){
            if((a[i]==a[i-1])&&(a[i]==a[i-2]))
            c[number1++]=a[i];
        }
        if(c[number1-1]>b[0])
        printf("YES");
        else printf("NO");
    }
    else if(numb==4){
        int number1=0;
        for(int i=1;i<numa;i++){
            if((a[i]==a[i-1])&&(a[i]==a[i-2])&&(a[i]==a[i-3]))
            c[number1++]=a[i];
        }
            if(c[number1-1]>b[0])
        printf("YES");
        else printf("NO");
        }
    else if(numb==5){
        int number1=0,number2=0;
        char e=0;
        for(int i=0;i<numa;i++){
            if(a[i]!=a[i+1]){
                if(a[i]>e){
                d[number2++]=a[i];
                e=a[i];
            }
             }
            }//去掉a中重复字符
            for(int i=0;i<number2;i++){
                if((d[i]==d[i+1]-1)&&(d[i]==d[i+2]-2)&&(d[i]==d[i+3]-3)&&(d[i]==d[i+4]-4))
                c[number1++]=d[i];
                }
        if(c[number1-1]>b[0])
        printf("YES");
        else printf("NO");
        }
                
    system("PAUSE");
    return EXIT_SUCCESS;
}

发表于 2018-03-13 15:17:43 回复(0)

编到一半,发现哈希计数很简单,不过,我还是把我第一次的思路实现了。 swicth的重复可以提取出来,自行优化

package com.speical.first;

import java.util.Scanner;

public class Pro190 {

    public static boolean compare(String strA, String strB) {
        boolean flag = false;
        int index = 0;
        for(; index < strA.length(); index++) {
            if(strA.charAt(index) > strB.charAt(0)) {
                break;
            }
        }
        int count;
        if(index < strA.length()) {
            switch (strB.length()) {
            case 1: flag = true; break;
            case 2:
                for(int j = index; j < strA.length();) {
                    if((++j) < strA.length() && strA.charAt(j) == strA.charAt(j - 1)) {
                        flag = true;
                        break;
                    }
                }
                break;
            case 3:
                for(int j = index; j < strA.length();) {
                    count = 2;
                    while((++j) < strA.length() && strA.charAt(j) == strA.charAt(j - 1)) {
                        count--;
                    }
                    if(count == 0) {
                        flag = true;
                        break;
                    }
                }
                break;
            case 4:
                for(int j = index; j < strA.length();) {
                    count = 3;
                    while((++j) < strA.length() && strA.charAt(j) == strA.charAt(j - 1)) {
                        count--;
                    }
                    if(count == 0) {
                        flag = true;
                        break;
                    }
                }
                break;
            case 5:
                char ch;
                for(int j = index; j < strA.length(); j++) {
                    count = 4;
                    ch = strA.charAt(j);
                    while(strA.indexOf((char)(++ch)) != -1 && count-- > 0);
                    if(count == 0) {
                        flag = true;
                        break;
                    }
                }
                break;
            }
        }
        return flag;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner input = new Scanner(System.in);
        while(input.hasNext()) {
            String strA = input.nextLine();
            String strB = input.nextLine();
            System.out.println(compare(strA, strB) ? "YES" : "NO");
        }
    }

}
发表于 2018-02-04 22:07:46 回复(0)
#include <bits/stdc++.h>
using namespace std;
int a[10];
int main()
{
	string s,s1;
	while(cin>>s>>s1)
	{
		for(int i=0;i<s.size();i++)
		{
			a[s[i]-'0']++;
		}
		//五张牌特殊处理 
		if(s1.size()==5)
		{
			int tag=0;
			for(int i=s1[0]-'0'+1;i<=5;i++)//以i开头连续5个 
			{
				int flag=1;
				for(int j=0;j<=4;j++)
				{
					if(a[i+j]==0)
					{
						flag=0;//中间某张没有 
						break;
					}
				}
				if(flag)	tag=1;//五张都有 
			}
			if(tag)
			{
				cout<<"YES"<<endl;
			}
			else	cout<<"NO"<<endl;
		}
		else
		{
			int flag=0;
			for(int j=s1[0]-'0'+1;j<=9;j++)
			{
				if(a[j]>=s1.size())
				{
					flag=1;
					break;
				}
			}
			if(flag)	cout<<"YES"<<endl;
			else	cout<<"NO"<<endl;
		}
	}
	return 0;
}

编辑于 2024-03-21 17:28:35 回复(0)
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main() {
    string a, b;
    while (cin >> a >> b) {
        vector<int>number(10);      //各个数字在字符串a中的个数
        for (const auto& ch : a) {
            number[ch - '0']++;
        }
        int n = b.length();
        bool flag = false;
        if (n <= 4) {
            for (int i = b[0] - '0' + 1; i <= 9; i++) {
                if (number[i] >= n) {
                    flag = true;
                    break;
                }
            }
        } else {
            int count = 0;
            if (b[0] >= '5') {
                flag = false;
            } else {
                for (int i = b[0] - '0' + 1; i <= 9 && count < 5; i++) {
                    if (number[i] > 0) {
                        count++;
                    } else {
                        count = 0;
                    }
                }
                flag = count == 5;
            }
        }
        cout << (flag ? "YES" : "NO") << endl;
    }
    return 0;
}

编辑于 2024-03-07 19:10:59 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String []args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) {
            String a = in.nextLine();       //表示手中的牌
            String b = in.nextLine();       //表示出的牌
            boolean flag = false;           //标识 是否有大过的牌
            if (b.length() == 1) {          //只有一张牌
                char c = b.charAt(0);       //读取第一个字符
                //判断a中是否有大过c的牌
                for (int i = 0; i < a.length(); i++) {
                    if (a.charAt(i) > c) {
                        flag = true;
                        break;
                    }
                }
                if (flag) {         //能压下去
                    System.out.println("YES");
                    flag = false;           //重置标识
                    continue;
                } else {
                    System.out.println("NO");
                }
            } else if (b.length() >= 2 && b.length() <= 4) { //"对子"、"三连"、"炸"
                char c = b.charAt(0);
                for (int i = 0; i < a.length(); i++) { //查看是否有大过的牌
                    if (a.charAt(i) > c) {
                        int length = getCharacterLength(a, a.charAt(i));  //该字母的牌数
                        if (length == 1) {      //牌只有一张,不满足条件
                            continue;
                        }
                        if (b.length() == 2) {
                            if (length >= 2) {
                                flag = true;
                                break;
                            }
                        } else if (b.length() == 3) {
                            if (length >= 3) {
                                flag = true;
                                break;
                            }
                        } else {
                            if (length == 4) {
                                flag = true;
                                break;
                            }
                        }
                    }
                }
                if (flag) {
                    flag = false;           //重置标识
                    System.out.println("YES");
                    continue;
                } else {
                    System.out.println("NO");
                }
            } else {                       //五张"顺子"
                int all_character[] = new int[10];
                for (int i = 0; i < 10; i++)
                    all_character[i] = 0;
                for (int i = 0; i < a.length(); i++) {
                    all_character[Integer.parseInt(Character.toString(a.charAt(
                                                       i)))]++; //对应数字 个数+1
                }
                int record = Integer.parseInt(Character.toString(b.charAt(0)));
                if (b.charAt(0) == '1') {   //为123456
                    if (all_character[record + 1] != 0 && all_character[record + 2] != 0 &&
                            all_character[record + 3] != 0 && all_character[record + 4] != 0 &&
                            all_character[record + 5] != 0
                            || all_character[record + 2] != 0 && all_character[record + 3] != 0 &&
                            all_character[record + 4] != 0 && all_character[record + 5] != 0 &&
                            all_character[record + 6] != 0
                            || all_character[record + 3] != 0 && all_character[record + 4] != 0 &&
                            all_character[record + 5] != 0 && all_character[record + 6] != 0 &&
                            all_character[record + 7] != 0
                            || all_character[record + 4] != 0 && all_character[record + 5] != 0 &&
                            all_character[record + 6] != 0 && all_character[record + 7] != 0 &&
                            all_character[record + 8] != 0) {
                        flag = true;
                    }
                } else if (b.charAt(0) == '2') {
                    if (all_character[record + 1] != 0 && all_character[record + 2] != 0 &&
                            all_character[record + 3] != 0 && all_character[record + 4] != 0 &&
                            all_character[record + 5] != 0
                            || all_character[record + 2] != 0 && all_character[record + 3] != 0 &&
                            all_character[record + 4] != 0 && all_character[record + 5] != 0 &&
                            all_character[record + 6] != 0
                            || all_character[record + 3] != 0 && all_character[record + 4] != 0 &&
                            all_character[record + 5] != 0 && all_character[record + 6] != 0 &&
                            all_character[record + 7] != 0) {
                        flag = true;
                    }
                } else if (b.charAt(0) == '3') {
                    if (all_character[record + 1] != 0 && all_character[record + 2] != 0 &&
                            all_character[record + 3] != 0 && all_character[record + 4] != 0 &&
                            all_character[record + 5] != 0
                            || all_character[record + 2] != 0 && all_character[record + 3] != 0 &&
                            all_character[record + 4] != 0 && all_character[record + 5] != 0 &&
                            all_character[record + 6] != 0) {
                        flag = true;
                    }
                } else if (all_character[record + 1] != 0 && all_character[record + 2] != 0 &&
                           all_character[record + 3] != 0 && all_character[record + 4] != 0 &&
                           all_character[record + 5] != 0) {
                    if (a.contains("56789")) {
                        flag = true;
                    }
                }
                if (flag) {
                    flag = false;               //重置标识
                    System.out.println("YES");
                    continue;
                } else {
                    System.out.println("NO");
                }
            }
        }
    }

    /**
     * 得到某个字符总长度
     * @param a
     * @param c
     * @return
     */
    public static int getCharacterLength(String a, char c) {
        int length = 0;
        for (int i = 0; i < a.length(); i++) {
            if (a.charAt(i) == c)
                length++;
        }
        return length;
    }
}

发表于 2023-03-10 09:40:10 回复(0)

我最短!

#include <iostream>
#include <string>
#include <array>
#include <algorithm>
using namespace std;

array<string, 5> five{"12345", "23456", "34567", "45678", "56789"};

int main() {
    string a, b;
    while (cin >> a >> b){
        bool flag = false;
        if (b.size() <= 4){
            while (b[0] < '9'){
                for (char & c : b) c += 1;
                if (a.find(b) != string::npos){
                    flag = true;
                    break;
                }
            }
        }else{
            a.resize(unique(a.begin(), a.end()) - a.begin()); //去重
            for (int i = (b[0] - '0'); i < 5; ++i)
                if (a.find(five[i]) != string::npos){
                    flag = true;
                    break;
                }
        }
        if (flag) cout << "YES" << endl;
        else cout << "NO" << endl;
    }
}
发表于 2023-03-01 22:43:18 回复(0)
a=input()
b=input()
l=len(b)
if l==1:
    x=int(b)
    flag=0
    for i in a:
        if int(i)>x:
            flag=1
            break
    if flag==0:
        print('NO')
    else:
        print('YES')
elif l==2:
    x=int(b[0])
    flag=0
    for i in a:
        if int(i)>x and a.count(i)>=2:
            flag=1
            break
    if flag==0:
        print('NO')
    else:
        print('YES')
elif l==3:
    x=int(b[0])
    flag=0
    for i in a:
        if int(i)>x and a.count(i)>=3:
            flag=1
            break
    if flag==0:
        print('NO')
    else:
        print('YES')
elif l==4:
    x=int(b[0])
    flag=0
    for i in a:
        if int(i)>x and a.count(i)>=4:
            flag=1
            break
    if flag==0:
        print('NO')
    else:
        print('YES')    
else:
    if b=='56789':
        print('NO')
    elif b=='45678':
        if '5' in a and '6' in a and '7' in a and '8' in a and '9' in a:
            print('YES')
        else:
            print('NO')
    elif b=='34567':
        if '5' in a and '6' in a and '7' in a and '8' in a :
            if '4' in a&nbs***bsp;'9' in a:
                print('YES')
            else:
                print('NO')
        else:
            print('NO')
    elif b=='23456':
        if '5' in a and '6' in a and '7' in a:
            if ('3' in a and '4' in a)&nbs***bsp;('4' in a and '8' in a)&nbs***bsp;('8' in a and '9' in a):
                print('YES')
            else:
                print('NO')
        else:
            print('NO')
    else:
        if '5' in a and '6' in a:
            if ('2' in a and '3' in a and '4' in a)&nbs***bsp;('3' in a and '4' in a and '7' in a)&nbs***bsp;('4' in a and '7' in a and '8' in a) &nbs***bsp;('7' in a and '8' in a and '9' in a) :
                print('YES')
            else:
                print('NO')
        else:
            print('NO')
        
        
        
        
    
    

发表于 2022-05-09 18:12:19 回复(0)
#include<stdio.h>
int main(){
    char hand[105],desk[10];
    while(scanf("%s",&hand)!=EOF){
        int nums1[10],len2=0;
        scanf("%s",&desk);
        for(int i=0;i<10;i++){
            nums1[i]=0;
        }
        for(int i=0;hand[i]!='\0';i++){
            int x=hand[i]-'0';
            nums1[x]++;
        }
        for(int i=0;desk[i]!='\0';i++){
            len2++;
        }
        if(len2==1){
            int flag=0,y=desk[0]-'0';
            for(int i=y+1;i<10;i++){
                if(nums1[i]!=0){
                    flag=1;
                    printf("YES");
                    break;
                }
            }
            if(flag==0) printf("NO");
        }
        if(len2==2){
            int flag=0,y=desk[0]-'0';
            for(int i=y+1;i<10;i++){
                if(nums1[i]>1){
                    flag=1;
                    printf("YES");
                    break;
                }
            }
            if(flag==0) printf("NO");
        }
        if(len2==3){
            int flag=0,y=desk[0]-'0';
            for(int i=y+1;i<10;i++){
                if(nums1[i]>2){
                    flag=1;
                    printf("YES");
                    break;
                }
            }
            if(flag==0) printf("NO");
        }
        if(len2==4){
            int flag=0,y=desk[0]-'0';
            for(int i=y+1;i<10;i++){
                if(nums1[i]>3){
                    flag=1;
                    printf("YES");
                    break;
                }
            }
            if(flag==0) printf("NO");
        }
        if(len2==5){
            int flag=0,y=desk[0]-'0';
            for(int i=y+1;i<6;i++){
                int count=0;
                for(int j=0;j<5;j++){
                    if(nums1[i+j]!=0) count++;
                }
                if(count==5){
                    flag=1;
                    printf("YES");
                    break;
                }
            }
            if(flag==0) printf("NO");
        }
    }
    return 0;
}

发表于 2022-03-28 15:56:38 回复(0)
#include<stdio.h>
#include<string.h>

int main(void) {
    int tmp[10] = {0};
    char a[100];
    char b[5];
    scanf("%s", &a);
    scanf("%s", &b);
    int i;
    for (i=0; i<strlen(a); i++) { //记录每个数字出现了多少次。
        tmp[a[i]-'0']++;
    }
    if (strlen(b)<5) { // 非同花顺
        for (i=b[0]-'0'+1; i<10 && tmp[i]<strlen(b);i++);
        i==10?printf("NO"):printf("YES");
    } else { // 同花顺
        for (i=b[0]-'0'+1; i<6 && (tmp[i]*tmp[i+1]*tmp[i+2]*tmp[i+3]*tmp[i+4]==0); i++);
        i==6?printf("NO"):printf("YES");
    }
    return 0;
}


发表于 2021-12-17 21:09:38 回复(0)

问题信息

难度:
89条回答 7325浏览

热门推荐

通过挑战的用户

查看代码