本文共 933 字,大约阅读时间需要 3 分钟。
#include#include #include #include using namespace std;int n;int a[15];bool vis[15];int ans;void print(int *a) { for(int i = 1; i <= 10; ++i){ cout << a[i] <<" "; } } int cal(int st,int en) { int num = 0; for(int i = st; i <= en; ++i){ num = num*10 + a[i]; } return num; } void judge(int a[]){//x + y/z for(int i = 1; i < 9; ++i){ int x = cal(1,i); if(x >= n)//如果 x大于n了 肯定不满足 break; for(int j = i+(9-i)/2; j <= 9; ++j){//分子数字位数大于等于分母的 减少计算 int y = cal(i+1,j-1); int z = cal(j,9);//不知道为啥不能 cal(j+1,9) if((y%z == 0) && (x + y/z == n)) ++ans; } } } void dfs(int pos)//算出 1-9的全排列 { if(pos == 10){ judge(a); return ; } for(int i = 1; i <= 9; ++i){ if(!vis[i]){ vis[i] = true; a[pos] = i; dfs(pos+1); vis[i] = false; } } }int main() { while(cin >> n){ ans = 0; dfs(1); cout < <
转载地址:http://pqimi.baihongyu.com/