CPU消耗 < 3000ms
#include<stdio.h> int a[]={1,2,3,4,5,6,7,8,9},n,num=0,sun=0,z1=0,z2=0,z3=0; int toInt(int i,int j)//转为整数 { int sum=0,k; for(k=0;i+k<j;k++) sum=sum*10+a[i+k]; return sum; } void exchange(int i,int j)//交换 { int temp; temp=a[i]; a[i]=a[j]; a[j]=temp; } void allArray(int length)//全排列 { int i=0,j,k,q,m=0; if(length==8) {//对任意一种排列进行判断 for(j=1;toInt(0,j)<n;j++) { z1=toInt(0,j); for(k=j;k<9;k++) { if(k-j>=9-k) { z2=toInt(j,k); z3=toInt(k,9); if((z1*z3+z2)==(z3*n))//可以用(z2%z3==0&&z1+z2/z3==n) { num++; } } } } } else { while(length+i<9)//全排列的递归算法 { exchange(length,length+i); allArray(length+1); exchange(length,length+i); i++; } } } int main() { scanf("%d",&n); allArray(0); printf("%d\n",num); }