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;
}