蓝桥杯三羊生瑞气,暴力破解

       最近这段时间在刷蓝桥杯往年的题遇到遇到一道题,希望大神看见了能给个简单的解法。

       这个题呢是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




©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页