蓝桥杯真题 15省3-三羊献瑞

问题描述

观察下面的加法算式:


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


其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你输出“三羊献瑞”所代表的4位数字(答案唯一),不要输出任何多余内容。
若表达式不清楚,可参见下图。
蓝桥杯真题 15省3-三羊献瑞_第1张图片
输入

没有输入。
输出

输出一个数字,即“三羊献瑞”所代表的4位数字。
题目限制

1s, 1024KiB for each test case.
提示

用printf或cout输出答案。

思路

很明显本题为一道排列并组合的板子题,本文用了最简单的思路,不过代码看着稍显繁琐哦。排列并组合模板如何使用可参考此博客:

代码:

#include 
void disp(int b[])
{
	printf("%d%d%d%d",b[4],b[5],b[6],b[1]);
	printf("\n");
} 


void process(int b[])
{
	int a1 = b[0]*1000 + b[1]*100 + b[2]*10 +b[3];
	int a2 = b[4]*1000 + b[5]*100 + b[6]*10 +b[1];
	int sum = b[4]*10000 + b[5]*1000 + b[2]*100 + b[1]*10 + b[7];
	if((a1+a2 == sum) && b[0]!=0 && b[4]!=0)
	{
		disp(b);
	}
}

int main ()
{
	int a[]={0,1,2,3,4,5,6,7,8,9};
	int d[8];
	int len = 10;
	int z,x,c,v,b,n,m,l;
	
	for(z=0;z<len;z++)
	{
		for(x=0;x<len;x++)
		{
			if(x==z)continue;
			for(c=0;c<len;c++)
			{
				if(c==z || c==x)continue;
				for(v=0;v<len;v++)
				{
					if(v==z || v==x || v==c )continue;
					for(b=0;b<len;b++)
					{
						if(b==z || b==x || b==c || b==v)continue;
						for(n=0;n<len;n++)
						{
							if(n==z || n==x || n==c || n==v || n==b)continue;
							for(m=0;m<len;m++)
							{
								if(m==z || m==x || m==c || m==v || m==b || m==n)continue;
								for(l=0;l<len;l++)
								{
									if(l==z || l== x || l==c || l==v || l==b || l==n || l==m)continue;
									
									d[0]=a[z];d[1]=a[x];d[2]=a[c];d[3]=a[v];d[4]=a[b];
									d[5]=a[n];d[6]=a[m];d[7]=a[l];
									process(d);
								}
							}
						}
					}
				}
			}
		}
	}
 } 

答案:1085

运行示例
蓝桥杯真题 15省3-三羊献瑞_第2张图片

你可能感兴趣的:(蓝桥杯,蓝桥杯,排列组合)