(暴力枚举)
N = a + c/b
两次for循环,固定a,b时判断a,b,(n-a)*b是否为1-9无重复。
C++ 代码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
bool is(int a,int b,int c){ //判断a,b,c三个数是否为1-9
string s = to_string(a) + to_string(b) + to_string(c) ;
if(s.length()!=9)return false;
sort(s.begin(),s.end());
if(s!="123456789")return false;
else return true;
}
bool r(int a){ //判断a中有无重复数字
string s=to_string(a);
sort(s.begin(),s.end());
if(s.substr(0,1)=="0")return false;
for(int i=1;i<s.length();i++){
if(s.substr(i,1)==s.substr(i-1,1))return false;
}
return true;
}
int bit(int a){ //求a的位数
int b=0;
while(a>0){
a/=10;
b++;
}
return b;
}
int main(){
int n,sum=0;
cin>>n;
for(int i=1;i<n-1;i++){
if(r(i)){
for(int j=1;;j++){
if(j!=i && r(j) && is(i,j,(n-i)*j))sum++;
if(bit((n-i)*j)>(9-bit(i)-bit(j)))break; //给定n和i时j的最大值
}
}
}
cout<<sum;
return 0;
}