标签:har str using play roc change bsp print until
#include <cstdio> #include <cstring> #include <algorithm> using namespace std ; int Cole[6],cnt; bool vis[10],exist[6]; int ChangeToNum(char s[])///该函数把匹配好数字的字符串转化为数 { int num=0; for(int i=0; i<strlen(s); i++) { num*=10; num+=Cole[s[i]-‘A‘]; } return num; } void operation(char s1[],char s2[],char s3[]) { int a,b,c; a=ChangeToNum(s1); b=ChangeToNum(s2); c=ChangeToNum(s3); if(a+b==c) { cnt++; } if(a-b==c) { cnt++; } if(a*b==c) { cnt++; } if(b!=0&&c*b==a) { cnt++; } } bool ZeroCheak(char s1[],char s2[],char s3[]) { ///该函数用于检查前导零 if(Cole[s1[0]-‘A‘]==0&&strlen(s1)>1) { return false; } if(Cole[s2[0]-‘A‘]==0&&strlen(s2)>1) { return false; } if(Cole[s3[0]-‘A‘]==0&&strlen(s3)>1) { return false; } return true; } void CoTheLetter(int idex,char s1[],char s2[],char s3[],char str[],int k) { /* *通过递归给str中出现的字母匹配数字 *匹配完所有存在的字母后 *调用“ZeroCheak函数”检查这种匹配方式会不会使某一个字符串出现前导零 *如果不出现前导零就调用“operation函数”更新cnt的值 */ if(idex>=k) { if(ZeroCheak(s1,s2,s3)) operation(s1, s2, s3); return; } for(int i=0; i<10; i++) { if(!vis[i]) { Cole[str[idex]-‘A‘]=i; vis[i]=1; CoTheLetter(idex+1,s1,s2,s3,str,k); vis[i]=0; } } } void CheakExist(char s1[],char s2[],char s3[],char str[],int &k) { /* *这个函数用于检查真正出现的字母 *把真正出现的字母存入str *接下来我们给每个字母匹配对应数字的时候 *只需要给str中确定存在的字母匹配就可以了 */ k=0; memset(exist,false,sizeof(exist)); memset(str,‘\0‘,sizeof(str)); for(int i=0; i<strlen(s1); i++) { if(!exist[s1[i]-‘A‘]) { exist[s1[i]-‘A‘]=1; str[k++]=s1[i]; } } for(int i=0; i<strlen(s2); i++) { if(!exist[s2[i]-‘A‘]) { exist[s2[i]-‘A‘]=1; str[k++]=s2[i]; } } for(int i=0; i<strlen(s3); i++) { if(!exist[s3[i]-‘A‘]) { exist[s3[i]-‘A‘]=1; str[k++]=s3[i]; } } } int main() { int k; char s1[6],s2[6],s3[6],str[6]; while(~scanf("%s %s %s",s1,s2,s3)) { cnt=0;///该变量用于更新方法的个数 CheakExist(s1,s2,s3,str,k);///检查三个字符串中存在哪些字母 memset(vis,0,sizeof(vis)); CoTheLetter(0,s1,s2,s3,str,k);///匹配数字 printf("%d\n",cnt); } return 0; }
标签:har str using play roc change bsp print until
原文地址:http://www.cnblogs.com/zhangzehua/p/8012548.html