题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4403
题意:在数字中添加+和=,使得等式成立,求这样等式的个数
AC代码:
#include <stdio.h>
#include <string.h>
char a[20];
int num[20][20],len,ans;
int getnum(int x,int y){
int sum=0,i,t=1;
for(i=y;i>=x;i--){
sum+=(a[i]-'0')*t;
t*=10;
}
return sum;
}
void dfs2(int y,int sum1,int sum2){
if(y>=len){
if(sum1==sum2)
ans++;
return ;
}
for(int i=y;i<len;i++)
dfs2(i+1,sum1,sum2+num[y][i]);
}
void dfs1(int x,int sum,int mid){
if(x>=mid)
dfs2(mid,sum,0);
for(int i=x;i<mid;i++)
dfs1(i+1,sum+num[x][i],mid);
}
int main(){
int i,j;
while(~scanf("%s",a)){
if(strcmp(a,"END")==0)
break;
len=strlen(a);
memset(num,0,sizeof(num));
for(i=0;i<len;i++){
for(j=i;j<len;j++)
num[i][j]=getnum(i,j);
}
ans=0;
for(i=1;i<len;i++)
dfs1(0,0,i);
printf("%d\n",ans);
}
return 0;
}