1. 程式人生 > >藍橋杯:顛倒的價牌

藍橋杯:顛倒的價牌

顛倒的價牌


    小李的店裡專賣其它店中下架的樣品電視機,可稱為:樣品電視專賣店。


    其標價都是4位數字(即千元不等)。


    小李為了標價清晰、方便,使用了預製的類似數碼管的標價籤,只要用顏色筆塗數字就可以了(參見p1.jpg)。


    這種價牌有個特點,對一些數字,倒過來看也是合理的數字。如:1 2 5 6 8 9 0 都可以。這樣一來,如果牌子掛倒了,有可能完全變成了另一個價格,比如:1958 倒著掛就是:8561,差了幾千元啊!! 


    當然,多數情況不能倒讀,比如,1110 就不能倒過來,因為0不能作為開始數字。


    有一天,悲劇終於發生了。某個店員不小心把店裡的某兩個價格牌給掛倒了。並且這兩個價格牌的電視機都賣出去了!


    慶幸的是價格出入不大,其中一個價牌賠了2百多,另一個價牌卻賺了8百多,綜合起來,反而多賺了558元。


    請根據這些資訊計算:賠錢的那個價牌正確的價格應該是多少?

直接採用暴力搜尋

public class Main {
	public static void main(String[] args) {
		int x=0,y=0;
		int x1[]=new int[24];
		int x2[]=new int[24];
		int y1[]=new int[12];
		int y2[]=new int[12];
		int l[]={0,1,2,5,6,8,9};
		for(int a=1;a<7;a++){
			int a1=l[a];
			if(l[a]==6) a1=9;
			if(l[a]==9) a1=6;
			for(int b=0;b<7;b++){
				int b1=l[b];
				if(l[b]==6) b1=9;
				if(l[b]==9) b1=6;
				for(int c=0;c<7;c++){
					int c1=l[c];
					if(l[c]==6) c1=9;
					if(l[c]==9) c1=6;
					for(int d=1;d<7;d++){
						int d1=l[d];
						if(l[d]==6) d1=9;
						if(l[d]==9) d1=6;
						int k=l[a]*1000+l[b]*100+l[c]*10+l[d];
						int h=d1*1000+c1*100+b1*10+a1;
						if(k-h>200&&k-h<300){
							x1[x]=k-h;
							x2[x]=k;
							x++;
						}
						if(h-k>800&&h-k<900){
							y1[y]=h-k;
							y2[y]=k;
							y++;
						}
					}
				}
			}
		}
		for(int i=0;i<24;i++){
			for(int j=0;j<12;j++){
				if(y1[j]-x1[i]==558)
					System.out.println(x2[i]);
			}
		}
	}
}