3716 - 官网样题
时间限制 : 1 秒
内存限制 : 128 MB
<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> </span>=<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;"> </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; }