2017京东在线笔试编程题之 买东西

晚上做了京东的笔试
编程题在占了不起眼的30分,前面的多选加单选混合糅杂了各种语言各种系统软件开发的各个流程 我的天啊 我就是想好好的做个java笔试题 你给我整C#的题是要闹哪样。
闲言少叙 书归正传
两道题 一道是买东西 一道是爬山 。

题目一
大意是小B喜欢买东西到了商店之后发现店员还没有把价签贴到货架上,但是又等不及要买 ,因此想先把东西放在购物篮,拿到店员处根据价签算价。现在有价格表和购物表,你能帮ta预估一下最好的情况和最坏的情况下需要多少钱吗?
(这场景也是够BT的,谁想出来这么。。完全不知道怎么形容的。故事情节)


输入第一行是 n m ,n代表店里有多少个商品,m 代表购物栏有多少商品
输入第二行是 n个用空格隔开的整数代表不同商品的价格 (可重复)
接下来是m行商品名 用字符串表示

要求输出最小总价和最大总价


输出示例
6 3
1 2 5 3 6 8
banana
banana
apple
则最小价格应该是4,最大价格是22
输出示例
4 22

菜鸟只是把第一道看了就开始写代码

大概思路就是先读入数据,然后将价格排序
用map 存储商品名 并进行计数,按照数量进行排序
最后用两个数组相乘 则可得到最小值和最大值。
PS:读入第一行用nextInt()的时候要注意后面接一个nextLine()处理一下第一行末尾的\n要不然就会出现错误,啊啊啊啊啊啊不堪回首

结果很可惜 再给我两分钟我就能把这个代码调通了。错误的两处一个是上面的nextLine()没用。一个是遍历map时int j放在循环里了。
话说当时真是代码撸的飞快。还是差一点差一点啊。


import java.util.*;
public class shopping {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        in.nextLine();
        String[] price= in.nextLine().split(" ");
        //price list
        int [] pri = new int[n];
        for(int i=0;i<price.length;i++){
            pri[i]= Integer.valueOf(price[i]);
        }
        //count
        Map<String,Integer> map = new HashMap<String,Integer>();
        for(int i=0;i<m;i++){
            String item= in.nextLine();
            if(map.containsKey(item)){
                int val = map.get(item)+1;
                map.put(item, val);
            }else{
                map.put(item,1);
            }
        }
        in.close();
        //traverse
        int [] itemset = new int[m];
        int j=0;
        for(Object o:map.keySet()){
            int value=map.get(o);
            itemset[j]=value;
            j++;
        }
        //calculate
        insertion(itemset);
        insertion(pri);
        //max
        int min =0;
        for(int k=0;k<m;k++){
            min+=pri[k]*itemset[m-k-1];
        }
        int max = 0;
        for(int k=0;k<m;k++){
            max+=pri[n-1-k]*itemset[m-k-1];
        }
        System.out.println(min+" "+max);
    }
    //sort
    public static void insertion(int[] a){
            for(int i=0;i<a.length-1;i++){
                for(int j=i+1;j>0;j--){
                    if( a[j-1]<=a[j])
                        break;
                    int tmp = a[j-1];
`````

            a[j-1] = a[j];
                    a[j] = tmp;
                }
            }
        }

}
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值