#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char str[20];
#define N 32100
int temp1[N],temp2[N];
int cnt1,cnt2;
void dfs1(int pos,int l,int cnt,int pre)
{
if(pos==l)
{
if(!cnt)
temp1[cnt1++]=pre+cnt;
return;
}
dfs1(pos+1,l,10*cnt+(str[pos]-'0'),pre);
dfs1(pos+1,l,0,pre+10*cnt+(str[pos]-'0'));
}
void dfs2(int pos,int l,int cnt,int pre)
{
if(pos==l)
{
if(!cnt)
temp2[cnt2++]=pre+cnt;
return;
}
dfs2(pos+1,l,10*cnt+(str[pos]-'0'),pre);
dfs2(pos+1,l,0,pre+10*cnt+(str[pos]-'0'));
}
int main()
{
while(scanf("%s",str)!=EOF)
{
if(strcmp(str,"END")==0) break;
int l=strlen(str);
int ans=0;
for(int i=1;i<=l-1;i++)
{
cnt1=0;
cnt2=0;
if(i==1)temp1[cnt1++]=str[0]-'0';
else dfs1(0,i,0,0);
if(i+1==l) temp2[cnt2++]=str[i]-'0';
else dfs2(i,l,0,0);
/*printf("%d %d**\n",cnt1,cnt2);
// if(i==1){
for(int j=0;j<cnt1;j++)
printf("%d ",temp1[j]);
puts("");
for(int j=0;j<cnt2;j++)
printf("%d ",temp2[j]);
puts("");
//}*/
for(int j=0;j<cnt1;j++)
{
for(int h=0;h<cnt2;h++)
{
if(temp1[j]==temp2[h]) ans++;
}
}
}
printf("%d\n",ans);
}
return 0;
}
就是暴力枚舉等号的位置,然後對等号兩邊分别在枚舉,找出相等的就行了。。。
注意數組要大點,第一次數組越界了。。。。找一下大概範圍