题解
2025-08-03 13:52:09
发布于:陕西
1阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
int n, S[13], mp[13];
char str[13][13][3];
bool add(int a, int b) {
int sum = S[a] + S[b], ch = str[a][b][0] - 'A' + 1; //计算加和,取第一位
if (sum >= n - 1) { //有进位时,高位一定为1
if (strlen(str[a][b]) != 2 || mp[1] != ch) {
return 0; //若str[a][b]不为两位数或者第一位不为1,返回错误
} else {
sum -= n - 1; //减掉高位,取低位
ch = str[a][b][1] - 'A' + 1;
}
}
if (mp[sum] != ch) {
return 0; //不匹配则返回错误
}
return 1;
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%s", str[1][i]);
}
int M;
bool flag = 0;
for (int i = 2; i <= n; i++) {
M = 0;
for (int l = 1; l <= n; l++) {
scanf("%s", str[i][l]);
if (strlen(str[i][l]) > 1) {
M++; //计算两位数个数
}
}
S[i] = M; //记录字母对应数字
if (flag == 0 && mp[M]) { //查重
flag = 1;
}
mp[M] = str[i][1][0] - 'A' + 1; //记录数字对应字母以查重
}
if (flag) { //重复错误
printf("ERROR!");
return 0;
}
for (int i = 2; i <= n; i++) {
for (int l = 2; l <= n; l++) {
if (add(i, l) == 0) { //加起来检验加法表是否匹配
printf("ERROR!"); //不匹配错误
return 0;
}
}
}
for (int i = 2; i <= n; i++) {
printf("%c=%d ", str[i][1][0], S[i]);
}
printf("\n%d", n - 1);
return 0;
}
这里空空如也
有帮助,赞一个