您的位置:首页 > 编程语言

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

2016-09-05 22:07 603 查看
晚上做了京东的笔试

编程题在占了不起眼的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
;
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;
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 编程 京东