(京东在线笔试编程题)关于证券委托的一道题

来源:互联网 发布:linux cmd 编辑:程序博客网 时间:2024/06/09 23:48

题目的详细信息已经记不住,只能大致描述一下,就是求最有价值的的委托信息。

n、s、B、S

其中n代表委托信息,s要求的最有价值的委托信息的个数,B代表买入、S代表卖出,S条卖出按照从小到大,买入按照从大到小。

输出:

6 2

B 50 2 

S 50 1 

S 20 2 

S 30 1 

B 40 4 

B 50 6 

输出:

B 50 8

B 40 4

S 20 2

S 30 1

(备注:6代表委托信息的个数、2代表表示买入和卖出委托信息各返回2个 ,其中每行如“B 50 2",第一个字段B代表买入,S代表卖出,50代表价格,最后一个字段代表数量)

思路:排序,合并同类型,然后输出。

import java.util.*;public class Main {public static void main(String[] args) {Scanner sc=new Scanner(System.in);while(sc.hasNextInt()){int N=sc.nextInt();int M=sc.nextInt();List<TS> list1=new ArrayList<TS>();List<TB> list2=new ArrayList<TB>();for(int index=0;index<N;index++){String type=sc.next();int price=sc.nextInt();int num=sc.nextInt();if(type.equals("S")){TS t=new TS(type,price,num);list1.add(t);}else{TB t=new TB(type,price,num);list2.add(t);}}List<TS> listrs=new ArrayList<TS>();List<TB> listrb=new ArrayList<TB>();Collections.sort(list1);// 排序if(list1.size()>0){//合并相同类型listrs.add(list1.get(0));int count=0;for(int i=1;i<list1.size();i++){if(list1.get(i).price==list1.get(i-1).price){listrs.get(count).num+=list1.get(i).num;}else{listrs.add(list1.get(i));count++;}}}Collections.sort(list2);//如上操作if(list2.size()>0){listrb.add(list2.get(0));int count=0;for(int i=1;i<list1.size();i++){if(list2.get(i).price==list2.get(i-1).price){listrb.get(count).num+=list2.get(i).num;}else{listrb.add(list2.get(i));count++;}}}if(listrs.size()<M){for(int i=0;i<listrs.size();i++){System.out.print(listrs.get(i).type+" "+listrs.get(i).price+" "+listrs.get(i).num);System.out.println();}}else{for(int i=0;i<M;i++){System.out.print(listrs.get(i).type+" "+listrs.get(i).price+" "+listrs.get(i).num);System.out.println();}}if(listrb.size()<M){for(int i=0;i<listrb.size();i++){System.out.print(listrb.get(i).type+" "+listrb.get(i).price+" "+listrb.get(i).num);System.out.println();}}else{for(int i=0;i<M;i++){System.out.print(listrb.get(i).type+" "+listrb.get(i).price+" "+listrb.get(i).num);System.out.println();}}}}}class TB implements Comparable<TB>{String type;int price;int num;public TB(String t,int p,int n){this.type=t;this.price=p;this.num=n;}public int compareTo(TB t){if(this.price>t.price){return -1;}else if(this.price<t.price){return 1;}else{return 0;}}}class TS implements Comparable<TS>{String type;int price;int num;public TS(String t,int p,int n){this.type=t;this.price=p;this.num=n;}public int compareTo(TS t){if(this.price>t.price){return 1;}else if(this.price<t.price){return -1;}else{return 0;}}}


0 0