PAT B1039 -- 到底買不買

題目原文鏈接如下:LINK 

大致描述一下題目的意思,有[0-9],[a-z],[A-Z]範圍內的字符表示顏色,現在輸入兩個字符串,題目保證字符串只有這些字符,第一個字符串是攤主的串,第二個字符串是小紅想做的手鍊的串,如果攤主的串中所包含的顏色全部包含了小紅要做手鍊的顏色,並且攤主手鍊中每個顏色的數目大於小紅需要的改顏色珠子的數目,輸出"Yes + 攤主串子裏做完小紅的手鍊還剩的珠子數",反之,輸出"No + 小紅還需要的珠子數目"


解題思路:遍歷兩個字符串,把小紅所需要的那個字符串str2裏的每個元素一次去代表攤主珠串的字符串str1中遍歷,如果找到第一個相等的字符,把兩個字符都設置爲'*',當然任意不在題目給定字符範圍內的都可以。遍歷完之後,得到兩個新的字符串str1和str2,這個時候我們設置兩個計數器count1和count2,先去遍歷str2字符串,看裏面有沒有不是'*'的元素,有則count2++,輸出No和count2,然後去遍歷str1字符串,看裏面有沒有不是'*'的元素,有則count1++,輸出Yes和count1.


代碼如下:

#include <iostream>
#include <string>

using namespace std;

int main()
{
	string sell, buy;
	while (cin >> sell >> buy)
	{
		int remain = 0, need = 0;

		for (size_t i = 0; i < buy.length(); i++)
		{
			for (size_t j = 0; j < sell.length(); j++)
			{
				if (buy[i] == sell[j])
				{
					buy[i] = '*';
					sell[j] = '*';
				}
			}
		}

		for (size_t i = 0; i < buy.length(); i++)
		{
			if (buy[i] != '*')
				need++;
		}

		for (size_t j = 0; j < sell.length(); j++)
		{
			if (sell[j] != '*')
				remain++;
		}

		if (need != 0)
			cout << "No " << need << endl;
		else
			cout << "Yes " << remain << endl;
	}
    return 0;
}



最後,附加一個彩蛋,在使用VS調試的時候,被改寫後的字符串真的很萌~~

初始輸入:


處理以後:


發佈了46 篇原創文章 · 獲贊 23 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章