【普及-】集合运算(C++)
看在作者大大如此用心打代码的份上,就点个三连吧!!!
级别: | 普及-(部分网站不一样) |
难度: | 低 |
适做年龄: | 初中组 |
题目:
描述
在数学上, 2个集合A和B之间的运算一般有并集、差集、交集, 分别记作A+B、A-B、AxB。
本题要求设计一款模拟集合运算的游戏程序,已知所有集合的元素都是小写字母,集合的输入、输出用字符串表示。
例如, 集合A=(a, b, d, e) , 输入输出用字符串“abde”表示。
现在输入n个集合运算式, 求运算结果。
例如, 运算式abcd-bckg, 那么结果为ad。
输入
第一行一个正整数n,表示有多少运算式,1≤n≤100。下面n行,每行一个运算式。
运算符号一定是+、-、* 之一,运算符号两边各有一个空格隔开。
输出
共n行,对应输入的运算结果
样式输入
2
abcd + bcefg
abcd * bcefg
样式输出
abcdefg
bc
解答:
#include <bits/stdc++.h>
using namespace std;
string sa,sb,res;
char op;
int a[128],b[128];
string ys(string sa,char op,string sb)
{
for(int i=0;i<sa.size();i++)a[sa[i]]=1;
for(int j=0;j<sb.size();j++)b[sb[j]]=1;
if(op=='+')
{
for(char i='a';i<='z';i++)
{
if(a[i]||b[i])res=res+i;
}
}
else if(op=='-')
{
for(char i='a';i<='z';i++)
{
if(a[i]&&!b[i])res=res+i;
}
}
else if(op=='*')
{
for(char i='a';i<='z';i++)
{
if(a[i]&&b[i])res=res+i;
}
}
return res;
}
int main()
{
int n;
cin>>n;
while(n--)
{
memset(a,0,sizeof a);
memset(b,0,sizeof b);
res="";
cin>>sa>>op>>sb;
cout<<ys(sa,op,sb)<<endl;
}
return 0;
}