看一下大佬的思路:
https://www.acwing.com/solution/content/66592/
直接枚举二进制和三进制哪个位置是错误的,以及三进制应该修改成哪个数字即可。
#include <string>
#include <iostream>
using namespace std;
int main ()
{
string a, b; cin >> a >> b;
for (int i = 0; i < a.size(); i ++ )
for (int j = 0; j < b.size(); j ++ )
for (char k = '0'; k <= '2'; k ++ )
{
string ra = a; ra[i] ^= 1;
string rb = b; if (b[j] == k) continue; rb[j] = k;
int x = 0, y = 0;
for (int i = 0; i < ra.size(); i ++ ) x = x * 2 + ra[i] - '0';
for (int i = 0; i < rb.size(); i ++ ) y = y * 3 + rb[i] - '0';
if (x == y) return cout << x << endl, 0;
}
return 0;
}
作者:_Crush
链接:https://www.acwing.com/solution/content/66592/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
而我, 却那么菜:
#include<cstring>
#include<iostream>
#include<stdlib.h>
using namespace std;
int a[100], b[100];
string s1,s2;
int sum;
int main()
{
cin>>s1>>s2;
int len1=s1.length(), len2=s2.length();
for(int i=0; i<len1; i++) a[i]=s1[i]-'0';
for(int i=0; i<len2; i++) b[i]=s2[i]-'0';
if(a[0] == '0')
{
sum = 1;
for(int i=1; i<len1; i++) sum=sum*2+a[i];
printf("%d\n", sum);
return 0;
}
if(b[0] == '0')
{
sum = 1;
for(int i=1; i<len2; i++) sum=sum*3+b[i];
printf("%d\n", sum);
return 0;
}
for(int i=0; i<len1; i++)
{
a[i]=a[i]^1;
// printf("%d\n", a[i]);
int sum1=a[0];
for(int k=1; k<len1; k++) sum1=sum1*2+a[k];
a[i]=a[i]^1;
// printf("sum1 = %d\n", sum1);
for(int j=0; j<len2; j++)
{
for(int m=0; m<3; m++)
{
int t=b[j];
if(m == b[j])
continue;
b[j] = m;
int sum2=b[0];
for(int k=1; k<len2; k++) sum2=sum2*3+b[k];
b[j] = t;
// printf("sum2 = %d\n", sum2);
if(sum1 == sum2)
{
printf("%d\n", sum1);
return 0;
}
}
}
}
return 0;
}
//y总的代码
#include<iostream>
#include<cstring>
#include<algorithm>
#include<unordered_set>
using namespace std;
int get(string s, int b)// 将b进制数转化成十进制
{
int res = 0;
//秦九韶算法
for(auto c: s)
{
res = res * b + c - '0';
}
return res;
}
int main()
{
string a, b;
cin >> a >> b;
unordered_set<int> S;
for(auto& c: a)
{
c ^= 1;
S.insert(get(a, 2));
c ^= 1;
}
for(auto& c: b)
{
char t = c;
for (int i=0; i < 3; i ++)
{
if(i + '0' != t)
{
c = i + '0';
int x = get(b, 3);
if(S.count(x))
{
cout<<x<<endl;
return 0;
}
}
}
c = t;
}
return 0;
}