题目是别人的,我转抄过来的,不记得是谁的了。
第一个题目
(编程题)下列乘法算式中:每个汉字代表1个数字(1~9)。相同的汉字代表相同的数字,不同的汉字代表不同的数字。赛软件 * 比赛 = 软件比拼
试编程确定使得整个算式成立的数字组合,如有多种情况,请给出所有可能的答案。
【参考结果】
465 * 14 = 6510
下面贴出我自己和别人的代码:
package com.cs.games;
/**
*
全国软件大赛的题目貌似很难。今天费了两个多小时才做出来两个题目,悲催啊,感觉自己的水平真的不咋的啊,唉,
自信心严重的受打击,哈哈,好吧,慢慢练练吧,唉,悲催的我呀,
下面放上第一个题目
(编程题)下列乘法算式中:每个汉字代表1个数字(1~9)。相同的汉字代表相同的数字,不同的汉字代表不同的数字。
赛软件 * 比赛 = 软件比拼
试编程确定使得整个算式成立的数字组合,如有多种情况,请给出所有可能的答案。
【参考结果】
465 * 14 = 6510
*
*总共有软件赛比拼5个字,前面3个,中间2个,结果是4个
* a,b,c,d,e
* [1-9]
* eab * dc = abde
*
* a=1,b=2-9,c=
*
* 应该这样考虑:
* 前面是3位数(a),肯定是从123,到987
* 中间是2位数(b),肯定是从12,到98
* 相乘的积(c),有a/100==b%10,(a%100)/10==c/1000,a%10=(c%1000)/100,b/10=(c%100)/10
* a%100=软件,软件/10=软
*/
public class GameOne {
public static void main(String[] args) {
//这种循环能找到数据,但是如果“拼”字不是0,就没有数字了
for(int sai=0;sai<=9;sai++){
for(int ruan=0;ruan<=9;ruan++){
for(int jian=0;jian<=9;jian++){
for(int bi=0;bi<=9;bi++){
for(int pin=0;pin<=9;pin++){
if(sai!=ruan && sai!=jian && sai!=bi && sai!=pin
&&ruan!=jian && ruan!=bi && ruan!=pin
&&jian!=bi && jian!=pin
&&bi!=pin){
int x = Integer.parseInt(sai+""+ruan+""+jian);
int y = Integer.parseInt(bi+""+sai);
int z = Integer.parseInt(ruan+""+jian+""+bi+""+pin);
//System.out.println(x+" * "+y+"="+z);
if(x * y == z){
System.out.println(sai+""+ruan+""+jian+"*"+bi+""+sai+"="+ruan+""+jian+""+bi+""+pin);
}
}
}
}
}
}
}
//下面这个是别人写的,a应该从123开始,b应该从12开始吧,因为“赛软件”完全不一样,而且说了是1到9的数字,不可能是101啊,最小也是123,b同理
for(int a=101;a<=987;a++){
for(int b=10;b<=98;b++){
int x = a*b;
//System.out.println(a+"*"+b+"="+x);
if(x<9876 &&(a/100==b%10) && (x/1000 == (a%100)/10) && (a%10==(x%1000)/100) && b/10==(x%100)/10){
System.out.println(a+"*"+b+"="+x);
}
}
}
}
}