2013年蓝桥杯JavaA组题4(颠倒的价牌)

题目标题: 颠倒的价牌

小李的店里专卖其它店中下架的样品电视机,可称为:样品电视专卖店。其标价都是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");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值