右键网站 选择添加ftp站点,哪个网站做布料好,wordpress支付宝付费,小程序代理加盟有哪些大品牌思路 暴力匹配
读入目标数 n
看n是否与ab/c相等
因为c里面的除法是整除
我们将 nab/c
转换为 c*na*cb
那么如何获得a,b#xff0c;c
依题意 a#xff0c;b#xff0c;c三个数由1-9九个数字组成
且每个数字只能出现一次
由此 我们可以搜出123456789的全部排列方式… 思路 暴力匹配
读入目标数 n
看n是否与ab/c相等
因为c里面的除法是整除
我们将 nab/c
转换为 c*na*cb
那么如何获得a,bc
依题意 abc三个数由1-9九个数字组成
且每个数字只能出现一次
由此 我们可以搜出123456789的全部排列方式
然后 每次将这个九位数分成三部分
例如 a12,b4567,c89
又假如 当前排列为 985476321
获得a985,b476,c321;
或者
a98,b5476,c321;
枚举出所有的分法
同时与目标值匹配即可
若相等 则计数
#includeiostream #includecstdio #includealgorithm #includecstring using namespace std; int n,cnt; const int N10; bool used[N]; int st[N]; int num[10]{1,2,3,4,5,6,7,8,9}; int cal(int i,int j); void dfss() { //双循环 枚举出所有的分法 for(int i1;i6;i){ for(int ji1;j8;j){ int acal(1,i); int bcal(i1,j); int ccal(j1,9); //coutaendlbendlcendl; if(c*na*cb){ cnt; } } } //coutdsf(1); } void dfs(int u){ if(u9){ //当u9说明已经搜索出了一个排列 //修改num内存的值与当前排列相同 int ans0; for(int i1;i9;i){ num[i]st[i] ; // coutnum[i] ; } dfss();//计算当前排列是否匹配目标值 return ; } for(int i1;i9;i){ if(!used[i]){ used[i]true; st[u]i; dfs(u1); used[i]false; st[u]0; } } } int cal(int i,int j){ int res0; for( ; ij;i){ resres*10num[i]; } //将num的值转化为a,bc的值 return res; }
int main(){ cinn; dfs(1); coutcnt; return 0; }