1. 程式人生 > >軟體大賽題目---第一個題目- 賽軟體 * 比賽 = 軟體比拼

軟體大賽題目---第一個題目- 賽軟體 * 比賽 = 軟體比拼

題目是別人的,我轉抄過來的,不記得是誰的了。

第一個題目

 (程式設計題)下列乘法算式中:每個漢字代表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);
				}
			}
		}
	}
}