3714 - 猜灯谜(2013决赛C/C++B组第1题)

 

<span style="font-size:24pt;"><span>•</span></span><span style="font-family:Arial;color:black;font-size:24pt;">A </span><span style="font-family:宋体;color:black;font-size:24pt;">村的元宵节灯会上有一迷题:</span>

<span style="font-size:24pt;"><span>•</span></span><span style="font-family:Arial;color:black;font-size:24pt;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family:宋体;color:black;font-size:24pt;">请猜谜</span><span style="font-family:Arial;color:black;font-size:24pt;"> * </span><span style="font-family:宋体;color:black;font-size:24pt;">请猜谜</span><span style="font-family:Arial;color:black;font-size:24pt;"> = </span><span style="font-family:宋体;color:black;font-size:24pt;">请边赏灯边猜</span>

<span style="font-size:24pt;"><span>•</span></span><span style="font-family:Arial;color:black;font-size:24pt;"><span>&nbsp;&nbsp;&nbsp; </span></span><span style="font-family:宋体;color:black;font-size:24pt;">小明想,一定是每个汉字代表一个数字,不同的汉字代表不同的数字。</span><span style="font-family:Arial;color:black;font-size:24pt;"><span>&nbsp; </span></span><span style="font-family:Arial;color:black;font-size:24pt;"></span>

<span style="font-size:24pt;"><span>•</span></span><span style="font-family:Arial;color:black;font-size:24pt;"><span>&nbsp;&nbsp;&nbsp; </span></span><span style="font-family:宋体;color:black;font-size:24pt;">请你用计算机按小明的思路算一下,然后提交</span><span style="font-family:Arial;color:black;font-size:24pt;">“</span><span style="font-family:宋体;color:black;font-size:24pt;">请猜谜</span><span style="font-family:Arial;color:black;font-size:24pt;">”</span><span style="font-family:宋体;color:black;font-size:24pt;">三个字所代表的整数即可。</span>

<span style="font-size:24pt;"><span>•</span></span><span style="font-family:Arial;color:black;font-size:24pt;"><span>&nbsp;&nbsp;&nbsp; </span></span><span style="font-family:宋体;color:black;font-size:24pt;">请严格按照格式,通过浏览器提交答案。</span>

<span style="font-size:24pt;"><span>•</span></span><span style="font-family:宋体;color:black;font-size:24pt;">注意:只提交一个</span><span style="font-family:Arial;color:black;font-size:24pt;">3</span><span style="font-family:宋体;color:black;font-size:24pt;">位的整数,不要写其它附加内容,比如:说明性的文字。</span><span style="font-family:Arial;color:black;font-size:24pt;"> </span>

题目输入

题目输出

输入/输出样例

题目输入


                

题目输出


                

C语言解答

#include <stdio.h>
#define  N 10
#define  M 6
void perms(int p[],int start)
{
	int i,t;
	if(start==M)
	{
		if((p[0]*100+p[1]*10+p[2])*(p[0]*100+p[1]*10+p[2])==(p[0]*100000+p[3]*10000+p[4]*1000+p[5]*100+p[3]*10+p[1]))
				printf("%d%d%d\n",p[0],p[1],p[2]);
		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];
	for(int i=0;i<N;i++) p[i]=i;//数组赋初值		
	perms(p,0);//从数组中索引号为0的元素开始进行排列
	return 0;
}

C++解答

#include <stdio.h>
#define  N 10
#define  M 6
void perms(int p[],int start)
{
	int i,t;
	if(start==M)
	{
		if((p[0]*100+p[1]*10+p[2])*(p[0]*100+p[1]*10+p[2])==(p[0]*100000+p[3]*10000+p[4]*1000+p[5]*100+p[3]*10+p[1]))
				printf("%d%d%d\n",p[0],p[1],p[2]);
		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];
	for(int i=0;i<N;i++) p[i]=i;//数组赋初值		
	perms(p,0);//从数组中索引号为0的元素开始进行排列
	return 0;
}

时间限制 1 秒
内存限制 128 MB
讨论 统计
上一题 下一题