第七届蓝桥杯大赛个人赛省赛(软件类)真题3

凑算式

B DEF
A + --- + ------- = 10
C GHI

(如果显示有问题,可以参见【图1.jpg】)


这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。

比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。

这个算式一共有多少种解法?

注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。

DFS

#include<iostream>
using namespace std;
int arr[10]={0}, brr[10], s=0;
void DFS(int i) {
  if (i==9+1){
    if ((10-brr[1])*brr[3]*(brr[7]*100+brr[8]*10+brr[9])==
    brr[2]*(brr[7]*100+brr[8]*10+brr[9])+brr[3]*(brr[4]*100+brr[5]*10+brr[6])){
      s++;
    }
    return ;
  }
  else {
    for (int j=1; j<=9; j++){
      if (!arr[j]){
        brr[i]=j;
        arr[j]=1;
        DFS(i+1);
        arr[j]=0;
      }
    }
  }
}
int main(){
  DFS(1);
  cout<<s<<endl;
  return 0;
} 

暴力法

#include<iostream>
using namespace std;
int main() {
  int s=0;
  for (int i=1; i<10; i++)
    for (int j=1; j<10; j++)
      if (j!=i)
      for (int k=1; k<10; k++)
        if (k!=j&&k!=i)
        for (int l=1; l<10; l++)
          if (l!=k&&l!=j&&l!=i)
          for (int z=1; z<10; z++)
            if (z!=i&&z!=j&&z!=k&&z!=l)
            for (int x=1; x<10; x++)
              if (x!=z&&x!=l&&x!=k&&x!=j&&x!=i)
              for (int c=1; c<10; c++)
                if (c!=x&&c!=z&&c!=l&&c!=k&&c!=j&&c!=i)
                for (int v=1; v<10; v++)
                  if (v!=c&&v!=x&&v!=z&&v!=l&&v!=k&&v!=j&&v!=i)
                  for (int b=1; b<10; b++)
                    if (b!=v&&b!=c&&b!=x&&b!=z&&b!=l&&b!=k&&b!=j&&b!=i){
                        if ((10-i)*k*(c*100+v*10+b)==j*(c*100+v*10+b)+k*(l*100+z*10+x))
                          s++;
                      }
 cout<<s;
}
原文地址:https://www.cnblogs.com/a863886199/p/6561211.html