标签:style blog class code tar int
历届试题 带分数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
*/
标签:style blog class code tar int
原文地址:http://blog.csdn.net/ruzhuxiaogu/article/details/25340995