第六届蓝桥杯试题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); }