ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

题记(44)--打牌

2026/8/23 14:38:59 拓冰建站 浏览量
题记(44)--打牌

目录

一、题目内容

二、输入描述

三、输出描述

四、输入输出示例

五、完整C语言代码


一、题目内容

牌只有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。

四、输入输出示例

输入:

12233445566677
33

输出:

YES

五、完整C语言代码

AC代码~#include<stdio.h>
#include<string.h>
#include<malloc.h>void substr(char* s1, char* s2, int i, int len) {for (int k = 0; k < len; k++) {s1[k] = s2[i];i++;}s1[len] = '\0';
}int judge(char* s, int n) {for (int i = 1; i < n; i++)if (s[i] != s[i - 1])return 0;return 1;
}int judge_continue(char* s, int n) {int i = 0;char pre = s[0];for (int i = 1; i < n; i++) {if (s[i] != (pre + 1))return 0;pre = s[i];}return 1;
}int main() {char a[100], b[100];gets(a);int n = strlen(a);
//  char ch = getchar();gets(b);int len = strlen(b);int flag = 0;int i;if (len == 1) {i = 0;while (a[i] != '\0') {if (a[i] > b[0]) {flag = 1;break;}i++;}} else if (len == 2 || len == 3 || len == 4) {char* tmp = (char*)malloc((len + 1) * sizeof(char));for (int i = 0; i < n - len + 1; i++) {substr(tmp, a, i, len);if (judge(tmp, len) && (strcmp(tmp, b) > 0)) {flag = 1;break;}}} else {int index = 1;char pre = a[0];for (int i = 1; i < strlen(a); i++) {if (a[i] != pre) {a[index++] = a[i];pre = a[i];}}char* tmp = (char*)malloc(6 * sizeof(char));for (int i = 0; i < index - 4; i++) {substr(tmp, a, i, 5);if (judge_continue(tmp, 5) && (strcmp(tmp, b) > 0)) {flag = 1;break;}}}if (flag == 1)printf("YES\n");elseprintf("NO\n");return 0;
}