本文主要是介绍【PAT甲级 一个字符数组是否被另一个包含】1092 To Buy or Not to Buy (20 分) C++,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
给两个字符串,一个是卖的,一个是想买的。
你需要统计一下,看是不是卖的包含想买的。
- 如果包含,则YES,并输出多余的个数。
- 如果不包含,则No,并输出缺少的个数。
思路
维护两个数组,分别是已经有的数量have[]
、想要的数量want[]
。
- 数组的大小 等于面包的个数
- 数组下标 表示面包的颜色
- 数组中存放的数 表示面包的数量
计算差值,判断是否购买即可
题解 C++
#include<iostream>
#include<string>
#include<algorithm>using namespace std;
int main() {int have[10 + 26 + 26] = { 0 };int want[10 + 26 + 26] = { 0 };string haveStr;string wantStr;cin >> haveStr >> wantStr;//统计已有for (int i = 0; i < haveStr.length(); i++) {if (haveStr[i] >= '0'&&haveStr[i] <= '9') {have[haveStr[i] - '0']++;}else if (haveStr[i] >= 'a'&&haveStr[i] <= 'z') {have[haveStr[i] - 'a' + 10]++;}else if (haveStr[i] >= 'A'&&haveStr[i] <= 'Z') {have[haveStr[i] - 'A' + 10 + 26]++;}}//统计想要for (int i = 0; i < wantStr.length(); i++) {if (wantStr[i] >= '0'&&wantStr[i] <= '9') {want[wantStr[i] - '0']++;}else if (wantStr[i] >= 'a'&&wantStr[i] <= 'z') {want[wantStr[i] - 'a' + 10]++;}else if (wantStr[i] >= 'A'&&wantStr[i] <= 'Z') {want[wantStr[i] - 'A' + 10 + 26]++;}}//计算差值int more = 0;int less = 0;bool buy = true;for (int i = 0; i < 10 + 26 + 26; i++) {if (have[i] >= want[i]) {//足够more += (have[i] - want[i]);}else {//不足less += (want[i] - have[i]);buy = false;}}//输出if (buy) {cout << "Yes " << more;}else {cout << "No " << less;}system("pause");
}
这篇关于【PAT甲级 一个字符数组是否被另一个包含】1092 To Buy or Not to Buy (20 分) C++的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!