whenever

  • Home

  • Tags21

  • Categories6

  • Archives122

  • About

PAT乙级1039 || 到底买不买(详解,C/C++示例,测试点分析)

Posted on 2019-09-30 In PAT

到底买不买

题目描述

小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。

为方便起见,我们用[0-9]、[a-z]、[A-Z]范围内的字符来表示颜色。例如在图1中,第3串是小红想做的珠串;那么第1串可以买,因为包含了全部她想要的珠子,还多了8颗不需要的珠子;第2串不能买,因为没有黑色珠子,并且少了一颗红色的珠子。

figbuy.jpg

输入格式

每个输入包含 1 个测试用例。每个测试用例分别在 2 行中先后给出摊主的珠串和小红想做的珠串,两串都不超过 1000 个珠子。

输出格式

如果可以买,则在一行中输出 Yes 以及有多少多余的珠子;如果不可以买,则在一行中输出 No 以及缺了多少珠子。其间以 1 个空格分隔。

输入样例1

1
2
ppRYYGrrYBR2258
YrR8RrY

输出样例1

1
Yes 8

输入样例2

1
2
ppRYYGrrYB225
YrR8RrY

输出样例2

1
No 2

问题解决

解题思想

此题采用字符串散列思想就很简单了。在输入摊主的串珠和小红需要的串珠对应的字符串的同时(将字符以下标的形式存入数组),统计每个字符的个数;串珠的颜色只以大小写字母和数字来表示,它们对应的ASCII码的范围在0-128之间;判断是不足还是多余的时候,从0开始遍历整个数组,注意摊主有的而小红不需要的颜色也要统计为多余的部分,这一点可能会忽略。

代码示例(C/C++)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <cstdio>
using namespace std;
int main()
{
//用串珠标记的ASCII码最为数组下标,相应内容存入该串珠的个数
int a[128] = {0},b[128] = {0}; //a[]为摊主的串柱,b[]为小红的串珠
char c;
c = getchar();
while(c != '\n'){ //统计摊主的各串珠个数
a[c]++;
c = getchar();
}
c = getchar();
while(c != '\n'){ //统计小红需要串珠的个数
b[c]++;
c = getchar();
}
int more = 0,lack = 0;
for(int i = 0; i < 127; i++){
if(b[i]){ //i对应的颜色是小红想要的
if(a[i] > b[i]){ //该颜色串珠足够
more += a[i] - b[i];
}
else{ //该颜色串珠不足
lack += b[i] - a[i];
}
}
else{
if(a[i]){ //小红不需要的颜色但摊主的串珠有,也统计为多余的
more += a[i];
}
}
}
if(lack){ //有不足
printf("No %d",lack);
}
else{ //多余
printf("Yes %d",more);
}
return 0;
}

题目来源:PAT乙级1039
作者:CHEN, Yue
单位:浙江大学

稀罕作者
Mengzhao Wang WeChat Pay

WeChat Pay

Mengzhao Wang Alipay

Alipay

# C/C++ # PAT # 编程
PAT乙级1038 || 统计同成绩学生(详解,C/C++示例,测试点分析)
PAT乙级1040 || 有几个PAT(详解,C/C++示例,测试点分析)
  • Table of Contents
  • Overview
Mengzhao Wang

Mengzhao Wang

Try? All the way !
122 posts
6 categories
21 tags
  1. 1. 到底买不买
    1. 1.1. 题目描述
    2. 1.2. 输入格式
    3. 1.3. 输出格式
    4. 1.4. 输入样例1
    5. 1.5. 输出样例1
    6. 1.6. 输入样例2
    7. 1.7. 输出样例2
    8. 1.8. 问题解决
      1. 1.8.1. 解题思想
      2. 1.8.2. 代码示例(C/C++)
© 2021 Mengzhao Wang