第七届山东理工大学ACM趣味编程循环赛 Round#1 sdut4109 玄黄的字符串

来源:互联网 发布:仪表总里程算法 编辑:程序博客网 时间:2024/05/01 00:08

题目链接

Time Limit: 1000MS 

Memory Limit: 65536KB

Problem Description

       今天玄黄从学长手里接过了三串字符串,美其名曰是ACM集训队流传下来的东西,学长说这是集训队最珍贵的宝物,把其中两个字符串里的字母换一换,神奇的事情就会发生。果不其然,玄黄更换了其中两个字符串里的字母后,第三个字符串也发生了改变。机智的小绿看到了,“这种玩具我也会做,不就是一个乘法计算器吗”,说完,不屑地走开了。愚钝的玄黄还没有参透其中的奥秘,小绿说是乘法计算器,可是玄黄并没有看到数字啊?

Input

      输入数据有多组,到EOF结束。

      对于每组数据,输入三个字符串,字符串里保证只有“a,b,c,d,e”五种字母,每个字符串代表一个正数,数字位数和字符串长度相同,前两个字符串长度不超过2,最后一个字符串长度不超过4。

Output

     对于每组数据,输出5行,分别代表每个字符代表的数字(0<=a,b,c,d,e<=9),每种数字只能由一种字符表示,数据保证有解且只有唯一解,并且0不会出现在字符串的首位,如果其中有字符没有在输入中出现,则该行输出“-1”。每两组数据之间有一个空行。详情见示例输出。

Example Input

aaaaabaaaaabbcc

Example Output

a : 1b : 2c : -1d : -1e : -1a : 8b : 7c : 4d : -1e : -1

Hint

第一组示例:11*11=121

Author

玄黄
思路:示例比题目更好懂,第一组是11*11=121,第二组是88*88=7744,暴力枚举a,b,c,d,e所有可能出现的情况,将满足条件的解筛选出来,总共只需要找10^5种可能性,需要注意的就是两个字母不能表示同一个字符,还有,因为所有数字都是正数,所以a*a=a只有1*1=1满足条件,直接贴一个暴力代码
#include <stdio.h>#include <string.h>int f(char a[],int num[]){   int s=0,i;   if(num[a[0]]==0)return 0;   for(i=0; a[i]; i++)   {       if(num[a[i]]==-1)return 0;       s=10*s+num[a[i]];   }   return s;}int main(){   char a[10],b[10],c[10];   int num[200],book[20],i,j,k,l,m;   int flag;   int x,y,z;   while(~scanf("%s%s%s",a,b,c))   {       flag=0;       memset(num,-1,sizeof(num));       memset(book,0,sizeof(book));       for(i=0; a[i]; i++)num[a[i]]=0;       for(i=0; b[i]; i++)num[b[i]]=0;       for(i=0; c[i]; i++)num[c[i]]=0;       for(i=0; i<=9; i++)       {           if(num['a']!=-1)           {               num['a']=i;               book[i]=1;           }           for(j=0; j<=9; j++)           {               if(book[j])continue;               if(num['b']!=-1)               {                   num['b']=j;                   book[j]=1;               }               for(k=0; k<=9; k++)               {                   if(book[k])continue;                   if(num['c']!=-1)                   {                       num['c']=k;                       book[k]=1;                   }                   for(l=0; l<=9; l++)                   {                       if(book[l])continue;                       if(num['d']!=-1)                       {                           num['d']=l;                           book[l]=1;                       }                       for(m=0; m<=9; m++)                       {                           if(book[m])continue;                           if(num['e']!=-1)                           {                               num['e']=m;                               book[m]=1;                           }                           x=f(a,num);                           y=f(b,num);                           z=f(c,num);                           if(x*y==z&&z!=0)                           {                               flag=1;                               break;                           }                           book[m]=0;                       }                       if(flag)break;                       book[l]=0;                   }                   if(flag)break;                   book[k]=0;               }               if(flag)break;               book[j]=0;           }           if(flag)break;           book[i]=0;       }       printf("a : %d\n",num['a']);       printf("b : %d\n",num['b']);       printf("c : %d\n",num['c']);       printf("d : %d\n",num['d']);       printf("e : %d\n\n",num['e']);   }   return 0;}



阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小米5指南针不准怎么办 乐视2手机屏乱点怎么办 距离感应器坏了怎么办 乐视1屏幕失灵怎么办 苹果6指南针不准怎么办 乐视2没有耳机怎么办 小米max拍照很差怎么办 小米max没法root怎么办 小米max充电慢怎么办 乐视手机信号差怎么办 乐视2手机信号差怎么办 可是会员过期了怎么办 自带相机打不开怎么办 新速腾刹车异响怎么办 科三过不了怎么办 三星a7高温死机怎么办 雪铁龙c5噪音大怎么办 鞋子掉色怎么办咋补救 黑色鞋子掉色了怎么办 雪铁龙c2水温高怎么办 雪铁龙c2油耗高怎么办 红米note3发热怎么办 平板电脑不会用怎么办 小米3不能关机怎么办 小米平板没声音怎么办 gta5开车卡顿怎么办 小米4护眼后白屏怎么办 小米手机白屏怎么办 平板电脑很卡怎么办 小米平板没反应怎么办 经常忘记放手刹怎么办 神武2现金超出怎么办 微盟试用版过期怎么办 来月经肚子痛该怎么办 来月经时肚子疼怎么办 戴眼镜眼睛凸出怎么办 没有了你我怎么办 被sandfly咬了怎么办 我遭到入室盗窃怎么办 晚上到浦东机场怎么办 诸暨城西烂尾楼怎么办