1. 程式人生 > >第四屆藍橋杯A組--顛倒的價牌

第四屆藍橋杯A組--顛倒的價牌

package The_fourth_session_A;


import java.text.DecimalFormat;




/*
標題: 顛倒的價牌
    小李的店裡專賣其它店中下架的樣品電視機,可稱為:樣品電視專賣店。
    其標價都是4位數字(即千元不等)。
    小李為了標價清晰、方便,使用了預製的類似數碼管的標價籤,只要用顏色筆塗數字就可以了(參見p1.jpg)。
    這種價牌有個特點,對一些數字,倒過來看也是合理的數字。如:1 2 5 6 8 9 0 都可以。這樣一來,如果牌子掛倒了,
    有可能完全變成了另一個價格,比如:1958 倒著掛就是:8561,差了幾千元啊!! 
    當然,多數情況不能倒讀,比如,1110 就不能倒過來,因為0不能作為開始數字。
    有一天,悲劇終於發生了。某個店員不小心把店裡的某兩個價格牌給掛倒了。並且這兩個價格牌的電視機都賣出去了!
    慶幸的是價格出入不大,其中一個價牌賠了2百多,另一個價牌卻賺了8百多,綜合起來,反而多賺了558元。
    請根據這些資訊計算:賠錢的那個價牌正確的價格應該是多少?
    答案是一個4位的整數,請通過瀏覽器直接提交該數字。
    注意:不要提交解答過程,或其它輔助說明類的內容。
*/
public class DianDaoDeJiaPai
{
public static void main(String[] args) 
{
//將數字十進位制
DecimalFormat format = new DecimalFormat("0000");
String num = null;

//num1 記錄賠錢的價牌差價, num2 記錄賺錢價牌的差價, num3 記錄賠錢的正確價牌的價錢, num4 記錄賺錢的正確價牌的價錢
int num1[] = new int[100];
int num2[] = new int[100];
int num3[] = new int[100];
int num4[] = new int[100];
int s1 = 0, s2 = 0;

for(int i = 1000; i<10000; i++)
{
//十進位制該數
num = format.format(i);

//將該數轉換成字元陣列
int change_num = change(num.toCharArray()); 

//判斷若數字包含3 4 7則重新迴圈
if(change_num < 1000)
//返回迴圈頭
continue;
else if(String.valueOf(change_num).contains("3"))
continue;
else if(String.valueOf(change_num).contains("4"))
continue;
else if(String.valueOf(change_num).contains("7"))
continue;

if(200 <= (i - change_num) && (i - change_num) <= 300)
{
num1[s1] = i - change_num;
num3[s1] = i;
s1++;
}

if(800 <= (change_num - i) && (change_num - i) <= 900)
{
num2[s2] = change_num - i;
num4[s2] = i;
s2++;
}
}

int sum1 = 1;
int sum2 = 1;
int sum3 = 1;
int sum4 = 1;
//兩個陣列的元素互減
for(int i = 0; i<num2.length;i++)
{
for(int j = 0; j<num1.length;j++)
{
if(num2[i] - num1[j] == 558)
{
sum1 = num1[j];
sum2 = num2[i];
sum3 = num3[j];
sum4 = num4[i];
break;
}
}
}
System.out.println("賠錢的價牌賠了:"+sum1);
System.out.println("賺錢的價牌賺了:"+sum2);
System.out.println("賠錢的價牌正確價錢:"+sum3);
System.out.println("賺錢的價牌正確價錢:"+sum4);
}

public static int change(char arr[])
{
int num = 0;
for(int i=0; i<arr.length; i++)
{
if(arr[i] == '6')
{
arr[i] = '9';
}
else if(arr[i] == '9')
{
arr[i] = '6';
}
}

char arr2[] = new char[arr.length];

//顛倒位置
for(int i=0; i<arr.length; i++)
{
arr2[i] = arr[arr.length-i-1];
}

String str = String.valueOf(arr2);
num = Integer.valueOf(str);
return num;
}
}