题意:两个人踩气球,踩到气球就将自己分值乘以气球上的分值。若两人都算对分数,输出大的;若小的算错,输出大的;若大的算错,输出小的。
算错是指不能有n个2~100数字相乘得到。
思路:用回溯的思想。看看能不能找到初始分值。
AC代码
#include <bits/stdc++.h>
using namespace std;
bool fa,fb;
int n;
void dfs(int a,int b,int k)
{
if(b==1)
{
fb=1;
if(a==1)
fa=1;
}
if(k==1 || (fa&&fb))// 终止条件:次数用完,或二者均成立
return ;
if(a%k==0)
dfs(a/k,b,k-1);
if(b%k==0)
dfs(a,b/k,k-1);
dfs(a,b,k-1);
}
int main()
{
int a,b;
cin>>n;
while(n--)
{cin>>a>>b ;
if(a < b)
swap(a, b);//默认大的输出
fa = fb = 0;
dfs(a,b,100);
if(!fa && fb)//当且仅当前者算错,后者算对,输出后者
cout << b << endl;
else
cout<<a<<endl;
}
return 0;
}