[AcWing 2058. 笨拙的手指](https://www.acwing.com)
作者:
cyuyu
,
2022-01-07 23:26:42
,
所有人可见
,
阅读 202
AcWing 2058. 笨拙的手指
本题刚看到时没有头绪,看到几位大佬的解答后才有了做题思路,采用暴力枚举的方法,
将二进制得出十进制的结果放在一个数组中,三进制转化为十进制的结果放在一个数组中,
两者取交集
#include<iostream>
using namespace std;
#include<vector>
#include<string>
//采用暴力枚举的方法
int get(string s,int b){
//b进制函数转化为十进制
int x=0;
int i=0;
/* for(auto c: s){
x=x*b+c-'0';
}*/
while(i<s.size()){
x=x*b+s[i]-'0';
i++;
}
return x;
}
int main(){
string a,b;
cin>>a>>b;
string ra,rb;
ra=a;
rb=b;
vector<int>N;
for(int i=0;i<ra.size();i++){
ra[i]^=1;
//异或运算
N.push_back(get(ra,2));
ra=a;
}
vector<int>M;
for(int j=0;j<rb.size();j++){
for(char k='0';k<='2';k++){
if(b[j]==k){
continue;
}
rb[j]=k;
M.push_back(get(rb,3));
rb=b;
//注意:每一次更改完元素后要再次赋值为原数据,因为题目中说只有一个数据错误
}
}
for(int i=0;i<N.size();i++){
for(int j=0;j<M.size();j++){
if(N[i]==M[j])
{
cout<<M[j];
return 0;
}
}
}
return 0;
}