PAT 乙级 1039.到底买不买 C++/Java
小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。
为方便起见,我们用[0-9]、[a-z]、[A-Z]范围内的字符来表示颜色。例如在图1中,第3串是小红想做的珠串;那么第1串可以买,因为包含了全部她想要的珠子,还多了8颗不需要的珠子;第2串不能买,因为没有黑色珠子,并且少了一颗红色的珠子。
图 1
输入格式:
每个输入包含 1 个测试用例。每个测试用例分别在 2 行中先后给出摊主的珠串和小红想做的珠串,两串都不超过 1000 个珠子。
输出格式:
如果可以买,则在一行中输出 Yes
以及有多少多余的珠子;如果不可以买,则在一行中输出 No
以及缺了多少珠子。其间以 1 个空格分隔。
输入样例 1:
ppRYYGrrYBR2258
YrR8RrY
输出样例 1:
Yes 8
输入样例 2:
ppRYYGrrYB225
YrR8RrY
输出样例 2:
No 2
分析:
思路1
颜色总共有0-9,a-z,A-Z种,用了两个数组来保存摊主的珠串,以及小红需要的珠串(数组长度为123,因为z的ASCII码最大,为122)
输入的字符串,将字符的出现次数保存到sell和need数组。同时用bool exist数组(初始化false)表示小红需要的珠串(设为true)
用sell的每一位减去need的每一位,如果不是小红需要的,就是多余的;如果是小红需要的,且sell[I]-need[i]<0,说明缺了
思路2
将摊主的珠串和小红需要的珠串进行比较,相同的字符统一设为@或者#或者%等符号都ok
接着分别遍历两个字符串,摊主中如果有的字符不是我们设置的符号,就说明有多余
小红需求中如果有的字符不是我们设置的符号,就说明有缺少
C++实现:
思路1
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 int sellArr[123] = { 0 }; 6 int needArr[123] = { 0 }; 7 bool exist[123] = { false }; 8 int main() 9 { 10 string sell; 11 string need; 12 int less = 0; 13 int more = 0; 14 int index = 0; 15 cin >> sell >> need; 16 17 if (sell == need){ 18 printf("Yes 0"); 19 return 0; 20 } 21 22 for (int i = 0; i < sell.length(); ++i){ 23 index = (int)(sell[i]); 24 sellArr[index]++; 25 } 26 27 for (int i = 0; i < need.length(); ++i){ 28 index = (int)(need[i]); 29 needArr[index]++; 30 exist[index] = true; 31 } 32 33 for (int i = 48/*0的ASCII*/; i < 123; ++i){ 34 int temp = sellArr[i] - needArr[i]; 35 if (exist[i] != true){ 36 more = more + temp; 37 } 38 else if (exist[i] == true){ 39 if (temp < 0){ 40 less = less - temp; 41 } 42 } 43 } 44 if (less == 0){ 45 printf("Yes %d", more + 1); 46 } 47 else{ 48 printf("No %d", less); 49 } 50 return 0; 51 }
思路2
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 int main() 5 { 6 string sell; 7 string need; 8 int less = 0; 9 int more = 0; 10 11 cin >> sell >> need; 12 for(int i = 0; i < sell.size(); ++i) 13 { 14 for(int j = 0; j < need.size(); ++j) 15 { 16 //为什么不是sell[j]? 17 //有可能 need.size() > sell.size(); 18 //sell[j] 会越界 19 if(need[j] == sell[i]) 20 { 21 need[j] = '@'; 22 sell[i] = '@'; 23 } 24 } 25 } 26 27 for (int i = 0; i < sell.size(); ++i) 28 { 29 if (sell[i] != '@') 30 { 31 more++; 32 } 33 } 34 for (int i = 0; i < need.size(); ++i) 35 { 36 if (need[i] != '@') 37 { 38 less++; 39 } 40 } 41 if (less != 0) 42 { 43 cout << "No " << less; 44 } 45 else 46 { 47 cout << "Yes " << more; 48 } 49 return 0; 50 }
Java实现:
原文地址:https://www.cnblogs.com/47Pineapple/p/11716061.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 通过CREATE2获得合约地址:解决交易所充值账号问题
- 小知识:如何判定crontab任务的执行频度
- 以太坊合约静态分析工具Slither简介与使用
- Cesium第一次搭建环境出不来地球的问题
- 小知识:解决EXP-00003的报错
- Mysql5中Packet for query is too large (3396053 > 1048576),数据量太大解决方案
- 关于 servlet 的这个问题,你能答对吗?
- MYSQL数据优化常用配置参数
- Hadoop分块存储解析及还原分块存储的文件
- ValueError: too many values to unpack (expected 2)
- VMware15更新后克隆Centos7发现网卡起不来了
- 基于SSH的医院在线挂号
- Linux-远程拷贝(scp命令)
- Kettle使用JavaScript代码处理数据
- Hadoop入门---(wordcount)统计单词出现的次数