虫蚀算式问题

来源:互联网 发布:经传软件吧 编辑:程序博客网 时间:2024/06/01 09:10
#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;}

这里写图片描述

0 0
原创粉丝点击