3716 - 官网样题

 

<span style="font-size:28pt;"><span>•</span></span><span style="font-family:宋体;color:black;font-size:28pt;">下列乘法算式中:每个汉字代表</span><span style="font-family:Arial;color:black;font-size:28pt;">1</span><span style="font-family:宋体;color:black;font-size:28pt;">个数字</span><span style="font-family:宋体;color:black;font-size:28pt;">(</span><span style="font-family:Arial;color:black;font-size:28pt;">0~9</span><span style="font-family:宋体;color:black;font-size:28pt;">)。相同的汉字代表相同的数字,不同的汉字代表不同的数字。</span>

<span style="font-size:28pt;"><span>•</span></span><span style="font-family:宋体;color:black;font-size:28pt;font-weight:bold;">赛软件</span><span style="font-family:Arial;color:black;font-size:28pt;font-weight:bold;"> * </span><span style="font-family:宋体;color:black;font-size:28pt;font-weight:bold;">比赛</span><span style="font-family:Arial;color:black;font-size:28pt;font-weight:bold;"><span>&nbsp; </span>=<span>&nbsp; </span></span><span style="font-family:宋体;color:black;font-size:28pt;font-weight:bold;">软件比拼</span><span style="font-family:Arial;color:black;font-size:28pt;"> </span>

<span style="font-size:28pt;"><span>•</span></span><span style="font-family:宋体;color:black;font-size:28pt;">试编程确定使得整个算式成立的数字组合,如有多种情况,请给出所有可能的答案。</span>

<span style="font-size:28pt;"><span>•</span></span><span style="font-family:宋体;color:black;font-size:28pt;">【参考结果】</span>

<span style="font-size:28pt;"><span>•465*14=6510<br />

题目输入

题目输出

输入/输出样例

题目输入


                

题目输出


                

C语言解答

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


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]*100+p[1]*10+p[2])*(p[3]*10+p[0])==(p[1]*1000+p[2]*100+p[3]*10+p[4]))
				printf("%d%d%d*%d%d=%d%d%d%d\n",p[0],p[1],p[2],p[3],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];
	for(int i=0;i<N;i++) p[i]=i;//数组赋初值		
	perms(p,0);//从数组中索引号为0的元素开始进行排列
                return 0;
}

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