题目描述
著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字。 例如:
- L K V E
L L K V E
K K V E KL
V V E KL KK
E E KL KK KV
其含义为:
L+L=L,L+K=K,L+V=V,L+E=E
K+L=K,K+K=V,K+V=E,K+E=KL
…… E+E=KV
根据这些规则可推导出:L=0,K=1,V=2,E=3
同时可以确定该表表示的是4进制加法
//感谢lxylxy123456同学为本题新加一组数据
输入输出格式
输入格式:
n(n≤9)表示行数。
以下n行,每行包括n个字符串,每个字串间用空格隔开。(字串仅有一个为‘+’号,其它都由大写字母组成)
输出格式:
① 各个字母表示什么数,格式如:L=0,K=1,……按给出的字母顺序。
② 加法运算是几进制的。
③ 若不可能组成加法表,则应输出“ERROR!”
输入输出样例
输入样例#1:
5
+ L K V E
L L K V E
K K V E KL
V V E KL KK
E E KL KK KV
输出样例#1:
L=0 K=1 V=2 E=3
4
两位及以上的数字忽略,一位的字母若出现n次,则代表n-1。
要判断能否组成加法表(即每一个字母都有对应的数字)
1 /*by SilverN*/ 2 #include<algorithm> 3 #include<iostream> 4 #include<cstring> 5 #include<cstdio> 6 #include<cmath> 7 using namespace std; 8 char mp[30]; 9 int cnt[30]; 10 char ch; 11 char s[30]; 12 int n; 13 int main(){ 14 scanf("%d ",&n); 15 int i,j; 16 getchar(); 17 n--; 18 for(i=0;i<n;i++){ 19 getchar(); 20 scanf("%c",&ch); 21 mp[i]=ch; 22 } 23 for(i=0;i<n;i++){ 24 getchar(); 25 scanf("%c",&ch); 26 for(j=0;j<n;j++){ 27 getchar(); 28 scanf("%s",s); 29 if(strlen(s)>1)continue; 30 for(int k=0;k<n;k++){ 31 if(mp[k]==s[0]){ 32 cnt[k]++; 33 } 34 } 35 } 36 } 37 for(i=0;i<n;i++) 38 if(!cnt[i]){ 39 printf("ERROR! "); 40 return 0; 41 } 42 for(i=0;i<n;i++){ 43 printf("%c=%d ",mp[i],cnt[i]-1); 44 } 45 printf(" %d ",n); 46 return 0; 47 }