第六届蓝桥杯试题c/c++B组3

观察下面的加法算式:

祥 瑞 生 辉
+ 三 羊 献 瑞
-------------------
三 羊 生 瑞 气

(如果有对齐问题,可以参看【图1.jpg】)

其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。

请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。

#include<stdio.h>
int main() {
  int arr[10]={0};
  for (arr[0]=1; arr[0]<=9; arr[0]++){
  for (arr[1]=0; arr[1]<=9; arr[1]++){
  for (arr[2]=0; arr[2]<=9; arr[2]++){
  for (arr[3]=0; arr[3]<=9; arr[3]++){
  for (arr[4]=1; arr[4]<=9; arr[4]++){
  for (arr[5]=0; arr[5]<=9; arr[5]++){
  for (arr[6]=0; arr[6]<=9; arr[6]++){ 
  for (arr[7]=0; arr[7]<=9; arr[7]++){
    int ok = 1;
    for (int i = 0; i <= 7; i++) {
    for (int j = 0; j <= 7; j++) {
      if (i == j) {
        continue;
      }
      if (arr[i] == arr[j]) {
        ok = 0;
        break;
      }
    }
    }
    if (ok) {
      int num=arr[0]*1000+arr[1]*100+arr[2]*10+arr[3];
      int mum=arr[4]*1000+arr[5]*100+arr[6]*10+arr[1];
      int sum=arr[4]*10000+arr[5]*1000+arr[2]*100+arr[1]*10+arr[7];
      if (num+mum==sum)
        printf("%d+%d=%d", num, mum, sum);
    }
}}}}}}}}
}

#include<iostream>
#include<cstdio>
using namespace std;
int arr[11], brr[11];
int dfs(int i){
  if (i==8){
    if ((arr[0]*1000+arr[1]*100+arr[2]*10+arr[3])+(arr[4]*1000+arr[5]*100+arr[6]*10+arr[1])
    ==(arr[4]*10000+arr[5]*1000+arr[2]*100+arr[1]*10+arr[7])&&arr[0]!=0&&arr[4]!=0)
    cout<<arr[4]<<arr[5]<<arr[6]<<arr[1]; 
  }
  else{
    for (int j=0; j<=9; j++) {
      if (!brr[j]){
        arr[i]=j;
        brr[j]=1;
        dfs(i+1);
        brr[j]=0;
      }
    }
  }
}
int main() {
  dfs(0);
}
原文地址:https://www.cnblogs.com/a863886199/p/6568157.html