ZZQ • 2年前
源代码如下:
#include<bits/stdc++.h>
using namespace std;
map<char,int>m;
char a[10],ch;
int n,p[10];//p:产生组合数
string str[10][10];//存储加法标
bool Check()//判断是否成立函数
{
for(int i=0; i<n-1; i++)//枚举
for(int j=i; j<n-1; j++)
{
int x=p[i],y=p[j],z=0;//产生新组合
//16~19 判断
for(int k=0; k<str[i][j].size(); k++)
z=z*(n-1)+p[m[str[i][j][k]]];
if(z!=x+y)
return false;
}
return true;
}
int main()
{
for(int i=0; i<10; i++)//产生初始数字和,初始化p
p[i]=i;
cin>>n>>ch;//输入n,ch
for(int i=0; i<n-1; i++)
cin>>a[i],m[a[i]]=i;//读入行数,顺便映射
for(int i=0; i<n-1; i++)
{
cin>>ch;
for(int j=0; j<n-1; j++)
cin>>str[i][j];//读入数据
}
//没有成立或还能产生下一个组合,注意有分号,表示这是一条单独的语句
while(!Check()&&next_permutation(p,p+n-1));
if(Check())//如果成立,输出答案
{
for(int i=0; i<n-1; i++)//输出
cout<<a[i]<<"="<<p[m[a[i]]]<<(i==n-2?'\n':' ');
cout<<n-1<<'\n';
}
else//如果没有解
cout<<"ERROR!\n";
return 0;
}
评论: