、、、、
代码实现
#include<bits/stdc++.h> using namespace std; long long a,b,c; int vis[10]; long long n; int ans; bool check(int a,int c) { b=n*c-a*c; if(a<=0||b<=0||c<=0) return false ; int num=b; int bk[10]; memcpy(bk,vis,sizeof(vis)); while(num) { int k=num%10; num=num/10; if(!k||bk[k]) return false; bk[k]++; } int flag=0; for(int i=1;i<10;i++) { if(bk[i]!=1) { flag=1; break; } } if(flag==1) return false ; else return true; } void fc(int a,int c) { if(check(a,c)) { ans++; //cout<<a<<" "<<b<<" "<<c<<endl; } for(int i=1;i<10;i++) { if(!vis[i]) { vis[i]=1; fc(a,c*10+i); vis[i]=0; } } } void fa(int a) { if(a>=n) { return; } for(int i=1;i<10;i++) { if(!vis[i]) { vis[i]=1; fa(a*10+i); vis[i]=0; } } fc(a,c); } int main() { cin>>n; fa(a); cout<<ans<<endl; }
、、、、
标准解法
标签:std,递归,int,long,带分数,递推 From: https://www.cnblogs.com/LHJ822/p/17219983.html