2015年蓝桥杯省赛B组第3题--三羊献瑞



三羊献瑞


观察下面的加法算式:


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


(如果有对齐问题,可以参看【图1.jpg】)


其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。


请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<math.h>

int a[10],b[10],c[10];
void aa(int n)
{
	int i=0;
	while(n>0){
		a[i++]=n%10;
		n/=10;
	}
}
void bb(int n)
{
	int i=0;
	while(n>0){
		b[i++]=n%10;
		n/=10;
	}
}
int cc(int n)
{
	int i=0;
	while(n>0){
		c[i++]=n%10;
		n/=10;
	}
	if(i!=5)
		return 0;
	else 
		return 1;
}
int a1()
{
	int i,j;
	for(i=0;i<4;i++){
		for(j=0;j<5;j++){
			if(i!=j&&j<4&&a[i]==a[j])
				return 0;
			if(i!=2||j!=0){
				if(j<4&&a[i]==b[j])
					return 0;
			}
			if(i==0||i==3){
				if(j!=1&&j!=2){
					if(a[i]==c[j])
						return 0;
				}
			}
		}
	}
	return 1;
}
int bb()
{
	int i,j;
	for(i=0;i<4;i++){
		for(j=0;j<5;j++){
			if(j>i&&j<4&&b[i]==b[j])
				return 0;
			if(i==1&&b[i]==c[j])
				return 0;
		}
	}
	return 1;
}
int c1()
{
	int i,j;
	for(i=0;i<5;i++){
		for(j=i+1;j<5;j++){
			if(c[i]==c[j])
				return 0;
		}
	}
}
int main ()
{
	int i,j;
	for(i=1000;i<=9999;i++){
		for(j=1000;j<=9999;j++){
			memset(c,0,sizeof(c));
			
			if(cc(i+j)){
				memset(a,0,sizeof(a));
				memset(b,0,sizeof(b));
				aa(i);
				bb(j);	
				if(b[3]==c[4]&&b[2]==c[3]&&a[1]==c[2]&&a[2]==c[1]&&b[0]==a[2]&&a1()&&bb()&&c1()){
					printf(" %d
",i);
					printf("+%d
",j);
					printf("-----------
");
					printf("%d

",i+j);
					
				}
			}else{
				
			}
			
		}
	}
	return 0;
}

最后答案为:1085

代码运行结果如下:


原文地址:https://www.cnblogs.com/lanaiwanqi/p/10445765.html