PAT乙级(7)一的个数 乒乓球筐

PAT乙级(7)一的个数 乒乓球筐

链接:https://www.nowcoder.com/questionTerminal/091c945ea6954b348de3e7b1bd11f896来源:牛客网

输入描述:

输入有多组数据,每组数据包含一个正整数n (1≤n≤2147483647)和一个正整数r (2≤r≤16)。其中n为十进制整数,r为目标进制。

输出描述:

对应每组输入,输出整数n转换成r进制之后,其中包含多少个“1”。

输入

1 2
123 16

输出

1
0

思路:

2147483647 是int 的最大值,可以用long来接收.

关于进制的转换

中有.

然后判断有多少个1就行了

代码:


#include <iostream>

#include <stack>
using namespace std;
int main()
{
	long long n;
	int r;
	int	num = 0;
	stack <int> sta;
	int temp;
	int top = 0;
	while (cin>>n>>r)
	{
		while (n!=0)
		{
			if (n == r)
			{
				temp = 1;
				sta.push(temp);
				break;
			}
			else
			{
				temp = n % r;
				//   输入 2 2 时  会出错
				sta.push(temp);
				n = n / r;
			}
		}
		while (!sta.empty())
		{
			top = sta.top();
			if (top==1)
			{
				num++;		
			}
			sta.pop();
		}
		printf("%d\n", num);
		num = 0;
	}
	return 0;
}

链接:https://www.nowcoder.com/questionTerminal/bb4f1a23dbb84fd7b77be1fbe9eaaf32?toCommentId=4456871来源:牛客网

输入描述:

输入有多组数据。每组数据包含两个字符串A、B,代表A盒与B盒中的乒乓球,每个乒乓球用一个大写字母表示,即相同类型的乒乓球为相同的大写字母。字符串长度不大于10000。

输出描述:

每一组输入对应一行输出:如果B盒中所有球的类型在A中都有,并且每种球的数量都不大于A,则输出“Yes”;否则输出“No”。

输入

ABCDFYE CDE
ABCDGEAS CDECDE

输出

Yes
No

思路:

大坑没有,小坑不少.

简单实现:

先判断是否满足 A中包含B, 也就是 ABC AB ABC AS. 这两类情况.

然后判断是否满足 A 与B 中的同一型号 是否满足 a里的数量大于b里的数量. 如 ABC AA , ABCABC ABC

优雅的实现:

建立一个map,将a筐存放到 AA里,b存放到BB里

然后比较,如果b中某个对应位置的数大于a,输出no

代码:

优雅的实现:

链接:https://www.nowcoder.com/questionTerminal/bb4f1a23dbb84fd7b77be1fbe9eaaf32?toCommentId=4456871
来源:牛客网

思路: map的应用。
#include <iostream>
#include <string>
#include <map>
using namespace std;
 
int main()
{
    string A, B;
    while(cin >> A >> B)
    {
        map<char, int> AA, BB;
        for (int i = 0; i < A.size(); i++)
        {
            AA[A[i]]++;
        }
        for (int i = 0; i < B.size(); i++)
        {
            BB[B[i]]++;
        }
        for (int i = 'A'; i <= 'Z'; i++)
        {
            if (BB[i] > AA[i])
            {
                cout << "No" << endl;
                break;
            }
            if (i == 'Z')
            {
                cout << "Yes" << endl;
            }
        }
 
    }
}

简单实现:


#include <iostream>
#include <string>
using namespace std;
int main()
{
	string s1,s2;
	int a[27];
	for (int i = 0; i <27; i++)
	{
		a[i] = 2;
	}
	int temp = 0;
	//for (int i = 0; i < s1.length(); i++)
	//{
	//	temp = s1[i] - 65;
	//	cout <<temp << endl;
	//}
	bool falg = true;
	while (cin>>s1>>s2)
	{
		for (int i = 0; i < s2.length(); i++)
		{
			temp = s2[i] - 65;
			a[temp]=0;
			//cout << temp << " " << a[temp] << endl;
		}
		for (int i = 0; i < s1.length(); i++)
		{
			temp = s1[i] - 65;
			a[temp]=1;
			//cout <<temp<<" "<<a[temp] << endl;
		}
		for (int i = 0; i < 27; i++)
		{
			if (a[i]==0)
			{
				falg = false;
				break;
			}
		}
		for (int i = 0; i < 27; i++)
		{
			a[i] = 2;
		}
		if (falg)
		//a包含b   但不知道数量
		{
			for (int i = 0; i < 27; i++)
			{
				a[i] = 0;
			}
			for (int i = 0; i < s2.length(); i++)
			{
				temp = s2[i] - 65;
				a[temp]--;
				//cout << temp << " " << a[temp] << endl;
			}
			for (int i = 0; i < s1.length(); i++)
			{
				temp = s1[i] - 65;
				a[temp]++;
				//cout <<temp<<" "<<a[temp] << endl;
			}
			for (int i = 0; i < 27; i++)
			{
				if (a[i]<0)
				{
					falg = false;
					break;
				}
			}
		}
		for (int i = 0; i < 27; i++)
		{
			a[i] = 2;
		}
		if (falg)
			cout << "Yes" << endl;
		else
			cout << "No" << endl;
		falg = true;
		//归零
	}
	return 0;
}
发布了96 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41852212/article/details/102300966