2013年藍橋杯JavaA組題4(顛倒的價牌)

kongbai發表於2020-11-27

題目標題: 顛倒的價牌

小李的店裡專賣其它店中下架的樣品電視機,可稱為:樣品電視專賣店。其標價都是4位數字(即千元不等)。小李為了標價清晰、方便,使用了預製的類似數碼管的標價籤,只要用顏色筆塗數字就可以了。

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

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

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

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

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

答案是一個4位的整數,請通過瀏覽器直接提交該數字。

public class Main04 {

    public static void main(String[] args){
        System.out.println(reverse("1958"));
        // 列舉四位數,簡單篩選

        ArrayList<Price> a1 = new ArrayList<Price>();
        ArrayList<Price> a2 = new ArrayList<Price>();
      //建立好兩個ArrayList
        for(int i = 1000; i < 10000; i++){
            // 將其顛倒,和原價做差,將賠200多的放入一個集合,將賺800多放入一個集合
           String s = ""+i; 
           //轉換成字串
           
           if (s.contains("3") || s.contains("4") || s.contains("7")) continue; 
           //去掉字串中的 3,4,7
           
           String re_s = reverse(s);
           //呼叫reverse 實現反轉
          
           int i1 = Integer.parseInt(re_s);
            //將數字字串轉為數字
            
           int plus = i1 - i;
           
           if (plus > -300 && plus < -200) a1.add(new Price(i, plus));
           // 將虧錢的物件放入a1陣列中, 包含原本的錢和賺的錢
           if (plus > 800 && plus < 900) a2.add(new Price(i, plus));
           // 將賺錢的物件放入a2陣列中, 包含原本的錢和虧的錢
        }
        // 遍歷兩個集合兩兩組合、檢查是否相加位558
        for(Price p1 : a1){
            for(Price p2 : a2){
                if (p1.plus+p2.plus==558){
                    System.out.println(p1.p + " "+p1.plus);
                    System.out.println(p2.p + " "+p2.plus);
                }
            }
        }
        //輸出結果
    }

    // reverse用於反轉
    public static String reverse(String s){
        char[] ans = new char[s.length()];
        for(int i = s.length()-1,j=0; i>=0; i--,j++){
            char c = s.charAt(i);
            if(c == '6') ans[j]='9';
            else if (c=='9')ans[j]='6';
            else ans[j]=c;
        }
        return new String(ans);
    }


    // Price 物件,裡面有原價和差價的屬性
    public static class Price{
        int p; //原價
        int plus; //顛倒價-原價

        public Price(int p, int plus) {
            this.p = p;
            this.plus = plus;
        }
    }




}

細節知識補給

1、轉化為整型數字

1)Integer.parseInt(String s) ,程式碼示例如下:

public class Test {
public static void main(String args[]){

String s = "123";
int num = Integer.parseInt(s);
int sum = num + 100;
System.out.println("Result is: "+sum); // 輸出結果為:Result is: 223

}}2)Integer.valueOf(String s),程式碼示例如下:

public class Test2 {
public static void main(String args[]){

String s = "-100";
int num = Integer.valueOf(s);
int sum = num + 101;
System.out.println("Result is: "+sum); // 輸出結果為:Result is: 1

} }

2、轉化為浮點型數字

1)Float.parseFloat(String s),程式碼示例如下:

public class Test {
public static void main(String args[]){

String s = "123.11";

float num = Float.parseFloat(s);
float sum = num + 100;

System.out.println("Result is: "+sum); // 輸出結果為:Result is: 223.11

}}2)Double.parseDouble(String s),程式碼示例如下:

public class Test2 {

public static void main(String args[]){

String s = "100.01";
double num = Double.parseDouble(s);

double sum = num + 100;

System.out.println("Result is: "+sum); // 輸出結果為:Result is: 200.01

}}

3、java中整形、浮點型別轉化為字串

public class Test {

public static void main(String args[]){

int i = 11;
String s = i + ""; // 方法一

String s = String.valueOf(i); // 方法二
String s = Integer.toString(i); // 方法三
} }

4、Java中判斷字串是否為數字:

public static boolean isNumeric(String str){
for (int i = str.length();--i>=0;){

if (!Character.isDigit(str.charAt(i))){
return false;
} }

return true;

}

5、java中contains方法是判斷是否存在包含關係

java中contains方法是判斷是否存在包含關係,比如說a =[1,2,3,4], b=1那麼a就包含b

contains返回的是布林型別truefalse,包含的話就返回true,不包含的話就返回false

public class pratise {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String a = "l love feng ye";
        String b = "love";
        boolean c = a.contains(b);
        System.out.println(a.contains(b));
        //assertEquals(a.contains(b), "true");
    }
}

相關文章