算法题:凑算式一

凑算式

看这个算式:☆☆☆ + ☆☆☆ = ☆☆☆如果每个五角星代表 1 ~ 9 的不同的数字。这个算式有多少种可能的正确填写方法?173 +286 = 459295 +173 = 468173 +295 = 468183 +492 = 675以上都是正确的填写法!注意:111 +222 = 333 是错误的填写法!因为每个数字必须是不同的!也就是说:1~9中的所有数字,每个必须出现且仅出现一次!注意:不包括数字“0”!注意:满足加法交换率的式子算两种不同的答案。所以答案肯定是个偶数! 注意:只要求计算不同的填法的数目不要求列出所有填写法更不要求填写源代码!

#include
bool jiancha(int j,int k,int l)//判断三个整数的个十百位互不相同;不包括数字0;
{
	if(l>999)//和不能大于999
        return false;
   int a,b,c,d,e,f,g,h,i;
   a=j/100;b=(j%100)/10;c=j%10;
   //printf("%d%d%d",a,b,c);
   d=k/100;e=(k%100)/10;f=k%10;
   g=l/100;h=(l%100)/10;i=l%10;
   if(a==0||b==0||c==0||d==0||e==0||f==0||g==0||h==0||i==0)//个十百位都不能为0
       return false;
   if(a==b||a==c||a==d||a==e||a==f||a==g||a==h||a==i||b==c||b==d||b==e||b==f||b==g||b==h
	   ||b==i||c==d||c==e||c==f||c==g||c==h||c==i||d==e||d==f||d==g||d==h||d==i||e==f||e==g
	   ||e==h||e==i||f==g||f==h||f==i||g==h||g==i||h==i)//判断三个整数的个十百位互不相同;
	   return false;
   return true;

}
void main()
{
	int i,j,sum;sum=0;
	jiancha(500,400,500);
	for(j=101;j<1000;j++)
	{
		for(i=j;i<1000;i++)//i=j目的是为了不让结果重复  比如结果:128+123=251与结果:123+128=251重复的 
		{
			int a,b,c;
			a=j;b=i;c=a+b;
			if(jiancha(a,b,c))
			{sum++;
				//printf("%d+%d=%d  ",a,b,c);
			}

		}
	}
	printf("总共有%d种 ",sum);
}

思路:

两个加数a,b   a从101到999,b从101+a到999;
和为c=a+b;判断a,b,c满足的条件
1.个十白位互不相同
2.个十白不为0
3.c不能>1000;
具体实现函数  bool jiancha(int j,int k,int l);

运行结果


第一次写 博客有问题的请指出



你可能感兴趣的:(程序算法)