6
#include<stdio.h> #include<stdlib.h> #include<string.h> int vis[10],a[10]; int counter; int sum(int start,int end) { int total=0; int i; for(i=start;i<end;i++) total=total*10+a[i+1]; return total; } void check(int a[],int n,int num) { int begin=1,temp=num; while((temp=temp/10)!=0) begin++;//先判断目标数据的位数n,那么num1的位数小于等于n。 int i,j; int num1,num2,num3; for(i=1;i<begin+1;i++) { num1=sum(0,i); if(num1>num) return ; for(j=i+(n-i)/2;j<n-1;j++) { num2=sum(i,j); num3=sum(j,n-1); if(num2>num3&&num2%num3==0&&(num==num1+num2/num3)) { counter++; // printf("%d=%d+%d/%d\n",num,num1,num2,num3); } } } } void dfs(int start,int n,int num)//全排列 { if(start==n) { check(a,n,num); } else { int i; for(i=1;i<n;i++) { if(vis[i]) continue; vis[i]=1; a[start]=i; dfs(start+1,n,num); vis[i]=0; } } } int main() { int num; scanf("%d",&num); counter=0; memset(vis,0,sizeof(vis)); dfs(1,10,num); printf("%d\n",counter); system("pause"); return 0; } /*100 100=3+69258/714 100=81+5643/297 100=81+7524/396 100=82+3546/197 100=91+5742/638 100=91+5823/647 100=91+7524/836 100=94+1578/263 100=96+1428/357 100=96+1752/438 100=96+2148/537 11 */
原文:http://blog.csdn.net/ruzhuxiaogu/article/details/25340995