游客 Signup | Login
中文 | En

3715 - 古堡算式(2012C/C++本科省赛第2题

 

<span style="font-size:28pt;"><span>•</span></span><span style="font-family:Arial;color:black;font-size:28pt;"> 福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:</span>

<span style="font-size:28pt;"><span>•</span></span><span style="font-family:Arial;color:black;font-size:28pt;"><span>&nbsp;&nbsp;&nbsp; </span></span><span style="font-family:Arial;color:black;font-size:28pt;">ABCDE * ? = EDCBA</span>

<span style="font-size:28pt;"><span>•</span></span><span style="font-family:Arial;color:black;font-size:28pt;"><span>&nbsp;&nbsp;&nbsp; </span></span><span style="font-family:宋体;color:black;font-size:28pt;">他对华生说:“</span><span style="font-family:Arial;color:black;font-size:28pt;">ABCDE</span><span style="font-family:宋体;color:black;font-size:28pt;">应该代表不同的数字,问号也代表某个数字!”</span>

<span style="font-size:28pt;"><span>•</span></span><span style="font-family:Arial;color:black;font-size:28pt;"><span>&nbsp;&nbsp;&nbsp; </span>华生:“我猜也是!”</span>

<span style="font-size:28pt;"><span>•</span></span><span style="font-family:Arial;color:black;font-size:28pt;"><span>&nbsp;&nbsp;&nbsp; </span>于是,两人沉默了好久,还是没有算出合适的结果来。</span>

<span style="font-size:28pt;"><span>•</span></span><span style="font-family:Arial;color:black;font-size:28pt;"><span>&nbsp;&nbsp;&nbsp; </span>请你利用计算机的优势,找到破解的答案。</span>

<span style="font-size:28pt;"><span>•</span></span><span style="font-family:Arial;color:black;font-size:28pt;"><span>&nbsp;&nbsp;&nbsp; </span>把 </span><span style="font-family:Arial;color:black;font-size:28pt;">ABCDE </span><span style="font-family:宋体;color:black;font-size:28pt;">所代表的数字写出来。</span>

Input

Output

Examples

Input


                

Output


                

Solution C

#include <stdio.h>
#define  N 10
#define  M 5
void perms(int p[],int start)
{
	int i,t;
	if(start==M)
	{
		if(p[0]&&p[4])
		{
			for(i=1;i<N;i++)
			{
				if((p[0]*10000+p[1]*1000+p[2]*100+p[3]*10+p[4])*i==(p[4]*10000+p[3]*1000+p[2]*100+p[1]*10+p[0]))
					printf("%d%d%d%d%d",p[0],p[1],p[2],p[3],p[4]);
			}
		}
		return;
	}
	for(i=start;i<N;i++)// 注意i从start开始,不从0开始哦
	{
		t=p[i];p[i]=p[start];p[start]=t;//交换
		perms(p,start+1);//递归
		t=p[i];p[i]=p[start];p[start]=t;//交换回来
	}
}
int main()
{
	int p[N]={0,1,2,3,4,5,6,7,8,9};		
	perms(p,0);//从数组中索引号为0的元素开始进行排列
	return 0;
}

Solution C++

#include <stdio.h>
#define  N 10
#define  M 5
void perms(int p[],int start)
{
	int i,t;
	if(start==M)
	{
		if(p[0]&&p[4])
		{
			for(i=1;i<N;i++)
			{
				if((p[0]*10000+p[1]*1000+p[2]*100+p[3]*10+p[4])*i==(p[4]*10000+p[3]*1000+p[2]*100+p[1]*10+p[0]))
					printf("%d%d%d%d%d",p[0],p[1],p[2],p[3],p[4]);
			}
		}
		return;
	}
	for(i=start;i<N;i++)// 注意i从start开始,不从0开始哦
	{
		t=p[i];p[i]=p[start];p[start]=t;//交换
		perms(p,start+1);//递归
		t=p[i];p[i]=p[start];p[start]=t;//交换回来
	}
}
int main()
{
	int p[N]={0,1,2,3,4,5,6,7,8,9};		
	perms(p,0);//从数组中索引号为0的元素开始进行排列
	return 0;
}

Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题