#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
const int MAX = 50;
int num[MAX][3]; //num[i][0],num[i][1],num[i][2] 表示加法竖式中第i位对应的3个数
int x[MAX];
int bestx[MAX];
int n;
bool ok()
{
int carr = 0;
int sum = 0;
for(int i=n-1; i>=0; i--)
{
sum = carr + x[ num[i][0] ] + x[ num[i][1] ];
if(sum%n != x[ num[i][2] ])
return false;
carr = sum / n;
}
return true;
}
void backtrack(int dep)
{
if(dep >= n-1)
{
if(ok())
{
copy(x, x+n, bestx);
return;
}
return;
}
for(int i=dep; i<n; i++)
{
swap(x[dep], x[i]);
backtrack(dep+1);
swap(x[dep], x[i]);
}
}
int main()
{
ifstream fin("虫蚀算式.txt");
cout << "输入进制数:";
fin >> n; cout << n << endl;
cout << "输入算式:\n";
int i, j;
char nums[27];
for(j=0; j<3; j++)
{
fin >> nums; cout << nums;
for(i=0; i<n; i++)
num[i][j] = nums[i] - 'A';
cout << endl;
}
for(i=0; i<n; i++)
x[i] = i;
for(i=0; i<3; i++)
{
for(j=0; j<n; j++)
cout << num[j][i];
cout << endl;
}
backtrack(0);
cout << "英文字母对应的数字分别为:\n";
for(i=0; i<n; i++)
cout << bestx[i] << " ";
cout << endl;
cout << endl;
fin.close();
return 0;
}
虫蚀算式问题
最新推荐文章于 2021-02-19 15:32:41 发布