最近这段时间在刷蓝桥杯往年的题遇到遇到一道题,希望大神看见了能给个简单的解法。
这个题呢是15年的蓝桥杯的题,因为是填空,所以呢我就给暴力破解了,(好吧,我承认其实想了好长时间最后没办法只能给暴力破解掉了)。
首先看看题目:观察下面的加法算式:
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一)
首先说说思路:
1.当“祥瑞生辉”或“三羊献瑞”以0开头时答案不唯一;
2.由数学推理可知“祥+三”满十进一,所以“三”=1;
3.设A、B、C、D、E、F、F、G代表上面的八个不同的子,所以说这八个字是完全不等的。
代码实现:
#include<stdio.h>
int verify(int num1,int num2,int num3,int num4,int num5,int num6,int num7,int num8)
{
int i,j;
int array[8];
array[0]=num1; array[1]=num2; array[2]=num3; array[3]=num4;
array[4]=num5; array[5]=num6; array[6]=num7; array[7]=num8;
for(i=0;i<=7;i++)
{
for(j=i+1;j<=7;j++)
{
if(array[j]==array[i])
{
return 0;
}
}
}
return 1;
}
int main()
{
int xiang,rui,sheng,hui,san,yang,xian,qi;
int number1,number2,number3;
for(xiang=1;xiang<10;xiang++)
{
for(rui=0;rui<10;rui++)
{
for(sheng=0;sheng<10;sheng++)
{
for(hui=0;hui<10;hui++)
{
for(san=1;san<10;san++)
{
for(yang=0;yang<10;yang++)
{
for(xian=0;xian<10;xian++)
{
for(qi=0;qi<10;qi++)
{
number1=xiang*1000+rui*100+sheng*10+hui;
number2=san*1000+yang*100+xian*10+rui;
number3=san*10000+yang*1000+sheng*100+rui*10+qi;
if(number1+number2==number3 && verify(xiang,rui,sheng,hui,san,yang,xian,qi))
{
printf("符合题目要求的加法算式为:%d+%d=%d",number1,number2,number3);
}
}
}
}
}
}
}
}
}
getchar();
return 0;
}
运行结果截图如下,所以三羊献瑞表示的数字为:1085