【难题求解】做出来有ThoughtWorks大神带你结对编程

给你一次机会,轻松进入全球顶尖IT咨询公司ThoughtWorks,跟着技术大牛、男神女神们一起学习编程,你愿意吗?
全球十大最难面试IT公司为你免费提供这样的机会!报名开始啦!

亲临全球顶尖IT公司参加OpenDay,感受真实办公场景!

体验自由Geek氛围,与男神女神深入交流!

零距离接触技术大牛,学习最前沿编程技能!

经历四期编程实践,一月内创造完美代码!

活动期间,各种礼品,礼包,奖金等你拿!


只需两步,轻松报名
1、进入活动页面:http://www.nowcoder.com/activity/thoughtworks-pair   ,点击顶部右上角的“报名”按钮,

2、选择要参加报名的地区(有北京、西安、成都、武汉四地可选),在弹窗中留下你的信息,就完成预报名啦!

3、报名成功后,我们会给你填写的邮箱发送一封邮件,邮件里面共有10道有意思的题目,你可以任选一道,在5月30日前发送到thoughtworks@nowcoder.com,邮件命名必须是:TW作业—作业标题—你报名的地区—你的姓名—你的手机号码,如:TW作业—按类批发价出售—北京—杨小贤—13800138000
如果你没有收到邮件(一定是放进垃圾箱了!哼!),可以拉到下面直接查看题目哦!按照要求发到邮箱就可以啦!
带着编程的都有哪些大牛?
男神女神们都是来自最难面试的科技公司——ThoughtWorks的大牛们哦!没错,就是那家培养了无数CTO的外企ThoughtWorks——

报名需要什么条件?
不限年级!不限专业!所有对技术秉持热忱、热爱代码胜过一切的同学(要在校生)都可以报名参加!而且活动全程是免费的哦!只要填写基本资料,并且提交了编程小作业就可以啦!
活动的时间是?
报名时间:5月16日-5月30日
老师筛选:5月30日-6月6日
OPEN DAY:6月30日
结对编程辅导培养:6月上旬—7月初
终极PK:7月上旬
结对编程的形式是?
会采用线下面对面的形式,来和大牛亲密接触,实打实的结对编程哦!
地点会在你报名地区的ThoughtWorks办公室进行,让你亲自感受办公场景和分为哦!一共4期,将持续一个月时间。
终极PK是指什么?
培训结束后就该验收成果啦!现场结对编程终极PK,获胜者还有丰厚大奖等着你!

时间有限,速去报名:http://www.nowcoder.com/activity/thoughtworks-pair 
还有更多问题或者题目讨论,欢迎跟帖留言。
以下就是本次需要大家思考的难题啦!不能报名的同学也欢迎讨论哦!

收银机 - G1 - 买三免一

面试作业

需求描述

商店里进行购物结算时会使用收银机系统,这台收银机会在结算时根据客户的购物车中的商品和商店正在进行的优惠活动进行结算和打印购物小票。

已知商品信息包含:名称,数量单位,单价,类别和条形码(伪),数据结构如下:

javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }

已知我们可以对收银机进行设置,使之支持各种优惠。

我们需要实现一个名为打印小票的小模块,收银机会将输入的数据转换成一个JSON数据然后一次性传给我们这个小模块,我们将从控制台中输出结算清单的文本。

输入格式(样例):

javascript [ 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000003-2', 'ITEM000005', 'ITEM000005', 'ITEM000005' ]

其中对'ITEM000003-2'来说,"-"之前的是标准的条形码,"-"之后的是商品数量。 当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。

该商店正在对部分商品进行“买三免一”的优惠活动。解释:

“买三免一”是指,每当某一商品买进三个,就有一个免单。 店员设置该优惠哪些条形码对应的商品可以享受此优惠。 要求写代码支持上述的功能,并根据输入和设置的不同,输出下列小票。

小票内容及格式(样例):

当购买的商品中,有符合“买三免一”优惠条件的商品时:

``` <没钱赚商店>购物清单 名称:可口可乐,数量:3瓶,单价:3.00(元),小计:6.00(元) 名称:羽毛球,数量:5个,单价:1.00(元),小计:4.00(元)

名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)

买三免一商品: 名称:可口可乐,数量:1瓶

名称:羽毛球,数量:1个

总计:21.00(元) 节省:4.00(元)


```

当购买的商品中,没有符合“买三免一”优惠条件的商品时:

``` <没钱赚商店>购物清单 
名称:可口可乐,数量:3瓶,单价:3.00(元),小计:9.00(元) 
名称:羽毛球,数量:5个,单价:1.00(元),小计:5.00(元) 
名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)

总计:25.00(元)


```

数据格式

每一个商品对象的结构如下(样例):

javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }

促销信息对象的数组格式(样例):

javascript [ { type: 'BUY_THREE_GET_ONE_FREE', barcodes: [ 'ITEM000000', 'ITEM000001' ] } ]注意:type和barcodes是促销信息对象的主体结构,也可以适当扩展其它属性,以适应程序的扩展性。

作业要求

请完成全部需求,并输出样例格示的小票; 程序实现语言(JavaScript、C#、Java、Scala等)和实现形式(Console、Web、Desktop、APP等)不限; 请在保证实现代码的同时,尽量保持代码的整洁性、可读性、易于扩展和维护性等;

加分项

满足以下的条件(但并不仅限于这些条件),将会成为你的加分项:

良好的抽象和设计; 完善的测试,TDD开发; git小步提交; 良好的构建和编码规范;

2、收银机 - G1 - 打折


需求描述

商店里进行购物结算时会使用收银机系统,这台收银机会在结算时根据客户的购物车中的商品和商店正在进行的优惠活动进行结算和打印购物小票。

已知的信息:

  • 商品信息,包含:条形码(伪),名称,数量单位,单价和类别。

    javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }

  • 我们可以对收银机进行设置,使之支持各种优惠。

我们需要实现一个名为打印小票的小模块,收银机会将输入的数据转换成一个JSON数据,然后一次性传给我们这个小模块,我们将从控制台中输出结算清单的文本。

输入格式(样例):

javascript [ 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000003-2', 'ITEM000005', 'ITEM000005', 'ITEM000005' ]

其中对'ITEM000003-2'来说,"-"之前的是标准的条形码,"-"之后的是数量。 当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。

该商店正在对部分商品进行“单品打折”的优惠活动。对于“单品打折”的解释:

  • “单品打折”是指,某一商品的总价会打完折再收取。
  • 店员设置该优惠,设置哪些条形码对应的商品可以享受此优惠以及折扣的比例。

要求写代码支持上述的功能,并根据输入和设置的不同,输出下列小票。

小票内容及格式(样例):

  • 当购买的商品中,有符合“单品打折”优惠条件的商品时:
` *<没钱赚商店>购物清单
名称:可口可乐,数量:3瓶,单价:3.00(元),小计:8.55(元),优惠0.45(元) 
名称:羽毛球,数量:5个,单价:1.00(元),小计:4.50(元),优惠0.5(元) 
名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)

单品打折商品: 名称:可口可乐,折扣:九五折 名称:羽毛球,折扣:九折


总计:24.05(元) 节省:0.95(元)


`

  • 当购买的商品中,没有符合“单品打折”优惠条件的商品时:
` *<没钱赚商店>购物清单
名称:可口可乐,数量:3瓶,单价:3.00(元),小计:9.00(元) 
名称:羽毛球,数量:5个,单价:1.00(元),小计:5.00(元) 
名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)

总计:25.00(元)


`

数据格式

  1. 每一个商品对象的结构如下(样例),学生可以参照以下结构生成更多不同的商品:

    javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }

  2. 促销信息对象的数组格式(样例):

    javascript [ { type: 'FIVE_PERCENT_DISCOUNT', barcodes: [ 'ITEM000000' ], }, { type: 'TEN_PERCENT_DISCOUNT', barcodes: [ 'ITEM000001' ], } ]

作业要求

  1. 请完成全部需求,并输出样例格示的小票;
  2. 程序实现语言(JavaScript、C#、Java、Scala等)和实现形式(Console、Web、Desktop、APP等)不限;
  3. 请在保证实现代码的同时,尽量保持代码的整洁性、可读性、易于扩展和维护性等;

加分项

满足以下的条件(但并不仅限于这些条件),将会成为你的加分项:

  1. 良好的抽象和设计;
  2. 完善的测试,TDD开发;
  3. git小步提交;
  4. 良好的构建和编码规范;

3、收银机 - G1 - 单品满100减10块


需求描述

商店里进行购物结算时会使用收银机系统,这台收银机会在结算时根据客户的购物车中的商品和商店正在进行的优惠活动进行结算和打印购物小票。

  • 已知商品信息包含:名称,数量单位,单价,类别和条形码(伪)。以下是单个商品对象的结构:

    javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }

  • 已知我们可以对收银机进行设置,使之支持各种优惠。

我们需要实现一个名为打印小票的小模块,收银机会将输入的数据转换成一个JSON数据然后一次性传给我们这个小模块,我们将从控制台中输出结算清单的文本。

输入格式(样例):

javascript [ 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000003-2', 'ITEM000005', 'ITEM000005', 'ITEM000005' ]

其中对'ITEM000003-2'来说,"-"之前的是标准的条形码,"-"之后的是商品数量。 当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。

该商店正在对部分商品进行“单品满100减10块”的优惠活动。解释:

  • “单品满100减10块”是指,每当某一款商品算完小计之后,如果满100,则减去10元再收取,可累计优惠。
  • 店员设置该优惠哪些条形码对应的商品可以享受此优惠。

要求写代码支持上述的功能,并根据输入和设置的不同,输出下列小票。

小票内容及格式(样例):

  • 当购买的商品符合“单品满100减10块”优惠条件的商品时:
` *<没钱赚商店>购物清单
名称:篮球,数量:2个,单价:93.00(元),小计:176.00(元),优惠:10.00(元) 
名称:可口可乐,数量:3瓶,单价:3.00(元),小计:9.00(元) 
名称:羽毛球,数量:5个,单价:1.00(元),小计:5.00(元) 
名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)

单品满100减10块商品: 篮球,原价:186.00(元),优惠: 10.00(元)


总计:201.00(元) 节省:10.00(元)


`

  • 当购买的商品没有符合“单品满100减10块”优惠条件的商品时:
` *<没钱赚商店>购物清单
名称:可口可乐,数量:3瓶,单价:3.00(元),小计:9.00(元) 
名称:羽毛球,数量:5个,单价:1.00(元),小计:5.00(元) 
名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)

总计:25.00(元)


`

数据格式

  1. 每一个商品对象的结构如下(样例):

    javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }

  2. 促销信息对象的数组格式(样例):

    javascript [ { type: 'SINGLE_ITEM_BUY_HUNDRED_DISCOUNT_TEN', barcodes: [ 'ITEM000000', 'ITEM000001' ] } ]

注意: type和barcodes是促销信息对象的主体结构,也可以适当扩展其它属性,以适应程序的扩展性。

作业要求

  • 请完成全部需求,并输出样例格示的小票;
  • 程序实现语言(JavaScript、C#、Java、Scala等)和实现形式(Console、Web、Desktop、APP等)不限;
  • 请在保证实现代码的同时,尽量保持代码的整洁性、可读性、易于扩展和维护性等;

加分项

满足以下的条件(但并不仅限于这些条件),将会成为你的加分项:

  • 良好的抽象和设计;
  • 完善的测试,TDD开发;
  • git小步提交;
  • 良好的构建和编码规范;

4、收银机 - G1 - 单品批发价出售


需求描述

商店里进行购物结算时会使用收银机系统,这台收银机会在结算时根据客户的购物车中的商品和商店正在进行的优惠活动进行结算和打印购物小票。

  • 已知商品信息包含:名称,数量单位,单价,类别和条形码(伪)。以下是单个商品对象的结构:

javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }

  • 已知我们可以对收银机进行设置,使之支持各种优惠。

我们需要实现一个名为打印小票的小模块,收银机会将输入的数据转换成一个JSON数据然后一次性传给我们这个小模块,我们将从控制台中输出结算清单的文本。

输入格式(样例):

javascript [ 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000003-2', 'ITEM000005', 'ITEM000005', 'ITEM000005' ]

其中对'ITEM000003-2'来说,"-"之前的是标准的条形码,"-"之后的是数量。 当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。

该商店正在对部分商品进行“单品批发价出售”的优惠活动。解释:

  • “单品批发价出售”是指,当某一商品买进十个及以上,一律按照九五折出售。
  • 店员设置该优惠哪些条形码对应的商品可以享受此优惠。

要求写代码支持上述的功能,并根据输入和设置的不同,输出下列小票。

小票内容及格式(样例):

  • 当购买的商品中,有符合“单品批发价出售”优惠条件的商品时:
` *<没钱赚商店>购物清单
名称:可口可乐,数量:11瓶,单价:3.00(元),小计:31.35(元),优惠:1.65(元) 
名称:羽毛球,数量:5个,单价:1.00(元),小计:5.00(元) 
名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)

批发价出售商品: 名称:可口可乐,数量:11瓶


总计:47.35(元) 节省:1.65(元)


`

  • 当购买的商品中,没有符合“单品批发价出售”优惠条件的商品时:
` *<没钱赚商店>购物清单
名称:可口可乐,数量:3瓶,单价:3.00(元),小计:9.00(元) 
名称:羽毛球,数量:5个,单价:1.00(元),小计:5.00(元) 
名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)

总计:25.00(元)


`

数据格式

  1. 每一个商品对象的结构如下(样例):

    javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }

  2. 促销信息对象的数组格式(样例,只包含了主结构,可以根据需求自行扩展):

    javascript [ { type: 'Discount', barcodes: [ 'ITEM000000', 'ITEM000001' ] } ]

作业要求

  • 请完成全部需求,并输出样例格示的小票;
  • 程序实现语言(JavaScript、C#、Java、Scala等)和实现形式(Console、Web、Desktop、APP等)不限;
  • 请在保证实现代码的同时,尽量保持代码的整洁性、可读性、易于扩展和维护性等;

加分项

满足以下的条件(但并不仅限于这些条件),将会成为你的加分项:

  • 良好的抽象和设计;
  • 完善的测试,TDD开发;
  • git小步提交;
  • 良好的构建和编码规范;

5、收银机 - G1 - 第二个半价

面试作业

需求描述

商店里进行购物结算时会使用收银机系统,这台收银机会在结算时根据客户的购物车中的商品和商店正在进行的优惠活动进行结算和打印购物小票。

已知商品信息包含:名称,数量单位,单价,类别和条形码(伪)。

{ barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }已知我们可以对收银机进行设置,使之支持各种优惠。

我们需要实现一个名为打印小票的小模块,收银机会将输入的数据转换成一个JSON数据, 然后一次性传给我们这个小模块,我们将从控制台中输出结算清单的文本。

输入格式(样例):

[ 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000003-2', 'ITEM000005', 'ITEM000005', 'ITEM000005' ]其中对“ITEM000003-2”来说,“-”之前的是标准的条形码,“-”之后的是数量。 当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。

该商店正在对部分商品进行“第二个半价”的优惠活动。解释:

“第二个半价”是指,每当某一商品买进两个,就有一个半价。 店员设置该优惠哪些条形码对应的商品可以享受此优惠。 要求:写代码支持上述的功能,并根据输入和设置的不同,输出下列小票。

小票内容及格式(样例):

当购买的商品中,有符合“第二个半价”优惠条件的商品时:
` *<没钱赚商店>购物清单
名称:可口可乐,数量:3瓶,单价:3.00(元),小计:7.50(元),优惠:1.50(元) 
名称:羽毛球,数量:5个,单价:1.00(元),小计:4.00(元),优惠:1.00(元) 
名称:苹果,数量:2斤,单价:5.50(元),小计:8.25(元),优惠:2.75(元)

第二个半价商品: 名称:可口可乐,数量:1瓶 名称:羽毛球,数量:2个 名称:苹果,数量1斤


总计:19.75(元) 节省:5.25(元)


当购买的商品中,没有符合“第二个半价”优惠条件的商品时:
*<没钱赚商店>购物清单
名称:可口可乐,数量:3瓶,单价:3.00(元),小计:9.00(元) 
名称:羽毛球,数量:5个,单价:1.00(元),小计:5.00(元) 
名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)

总计:25.00(元)


`

数据格式

每一个商品对象的结构如下(样例):

{ barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }

促销信息对象的数组格式(样例):

[ { type: 'BUY_SECOND_GET_HALF_PRICE', barcodes: [ 'ITEM000000', 'ITEM000001' ] } ]注意:type和barcodes是促销信息对象的主体结构,也可以适当扩展其它属性,以适应程序的扩展性。

作业要求

  1. 请完成全部需求,并输出样例格式的小票;
  2. 程序实现语言(JavaScript、C#、Java、Scala等)和实现形式(Console、Web、Desktop、APP等)不限;
  3. 请在保证实现代码的同时,尽量保持代码的整洁性、可读性、易于扩展和维护性等;

加分项

满足以下的条件(但并不仅限于这些条件),将会成为你的加分项:

  1. 良好的抽象和设计;
  2. 完善的测试,TDD开发;
  3. git小步提交;
  4. 良好的构建和编码规范;

6、收银机 - G1 - 买二赠一

标签(空格分隔): 面试作业


需求描述

商店里进行购物结算时会使用收银机系统,这台收银机会在结算时根据客户的购物车中的商品和商店正在进行的优惠活动进行结算和打印购物小票。

  • 已知商品信息包含:名称,数量单位,单价,类别和条形码(伪)。以下是单个商品对象的结构:

    javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }

  • 已知我们可以对收银机进行设置,使之支持各种优惠。

我们需要实现一个名为打印小票的小模块,收银机会将输入的数据转换成一个JSON数据然后一次性传给我们这个小模块,我们将从控制台中输出结算清单的文本。

输入格式(样例):

javascript [ 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000003-2', 'ITEM000005', 'ITEM000005', 'ITEM000005' ]

其中对'ITEM000003-2'来说,"-"之前的是标准的条形码,"-"之后的是数量。 当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。 该商店正在对部分商品进行“买二赠一”的优惠活动。解释:

“买二赠一”是指,每当某一商品买进两个,就赠送数量为1的另外一款商品。 店员设置该优惠哪些条形码对应的商品可以享受此优惠,赠送的是哪些商品。 要求写代码支持上述的功能,并根据输入和设置的不同,输出下列小票。

小票内容及格式(样例):

  • 当购买的商品中,有符合“买二赠一”优惠条件的商品时:
` *<没钱赚商店>购物清单
名称:可口可乐(大),数量:5瓶,单价:6.00(元),小计:30.00(元) 
名称:羽毛球拍,数量:2个,单价:78.00(元),小计:156.00(元) 
名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)

买二赠一商品: 名称:雪碧,数量:2瓶,价值:6.00(元) 名称:羽毛球(12只装),数量:1个,价值:12.00(元)


总计:197.00(元) 节省:18.00(元)


`

当购买的商品中,没有符合“买二赠一”优惠条件的商品时:

` *<没钱赚商店>购物清单
名称:可口可乐,数量:3瓶,单价:3.00(元),小计:9.00(元) 
名称:羽毛球,数量:5个,单价:1.00(元),小计:5.00(元) 
名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)

总计:25.00(元)


`

数据格式

  1. 每一个商品对象的结构如下(样例):

    javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }

  2. 促销信息对象的数组格式(样例,只包含了主结构,可以根据需求自行扩展):

    javascript [ { type: 'FREE_GOODS_OFFER', barcodes: [ 'ITEM000000', 'ITEM000001' ] }, { type: 'OTHER_PROMOTION', barcodes: [ 'ITEM000004' ] } ]

作业要求

  • 请完成全部需求,并输出样例格示的小票;
  • 程序实现语言(JavaScript、C#、Java、Scala等)和实现形式(Console、Web、Desktop、APP等)不限;
  • 请在保证实现代码的同时,尽量保持代码的整洁性、可读性、易于扩展和维护性等;

加分项

满足以下的条件(但并不仅限于这些条件),将会成为你的加分项:

  • 良好的抽象和设计;
  • 完善的测试,TDD开发;
  • git小步提交;
  • 良好的构建和编码规范;

7、收银机 - G1 - 买三免一

面试作业

需求描述

商店里进行购物结算时会使用收银机系统,这台收银机会在结算时根据客户的购物车中的商品和商店正在进行的优惠活动进行结算和打印购物小票。

已知商品信息包含:名称,数量单位,单价,类别和条形码(伪),数据结构如下:

javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }

已知我们可以对收银机进行设置,使之支持各种优惠。

我们需要实现一个名为打印小票的小模块,收银机会将输入的数据转换成一个JSON数据然后一次性传给我们这个小模块,我们将从控制台中输出结算清单的文本。

输入格式(样例):

javascript [ 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000003-2', 'ITEM000005', 'ITEM000005', 'ITEM000005' ]

其中对'ITEM000003-2'来说,"-"之前的是标准的条形码,"-"之后的是商品数量。 当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。

该商店正在对部分商品进行“买三免一”的优惠活动。解释:

“买三免一”是指,每当某一商品买进三个,就有一个免单。 店员设置该优惠哪些条形码对应的商品可以享受此优惠。 要求写代码支持上述的功能,并根据输入和设置的不同,输出下列小票。

小票内容及格式(样例):

当购买的商品中,有符合“买三免一”优惠条件的商品时:

` *<没钱赚商店>购物清单
名称:可口可乐,数量:3瓶,单价:3.00(元),小计:6.00(元) 
名称:羽毛球,数量:5个,单价:1.00(元),小计:4.00(元) 
名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)

买三免一商品: 名称:可口可乐,数量:1瓶 名称:羽毛球,数量:1个


总计:21.00(元) 节省:4.00(元)


`

当购买的商品中,没有符合“买三免一”优惠条件的商品时:

` *<没钱赚商店>购物清单
名称:可口可乐,数量:3瓶,单价:3.00(元),小计:9.00(元) 
名称:羽毛球,数量:5个,单价:1.00(元),小计:5.00(元) 
名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)

总计:25.00(元)


`

数据格式

每一个商品对象的结构如下(样例):

javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }

促销信息对象的数组格式(样例):

javascript [ { type: 'BUY_THREE_GET_ONE_FREE', barcodes: [ 'ITEM000000', 'ITEM000001' ] } ]注意:type和barcodes是促销信息对象的主体结构,也可以适当扩展其它属性,以适应程序的扩展性。

作业要求

请完成全部需求,并输出样例格示的小票; 程序实现语言(JavaScript、C#、Java、Scala等)和实现形式(Console、Web、Desktop、APP等)不限; 请在保证实现代码的同时,尽量保持代码的整洁性、可读性、易于扩展和维护性等;

加分项

满足以下的条件(但并不仅限于这些条件),将会成为你的加分项:

良好的抽象和设计; 完善的测试,TDD开发; git小步提交; 良好的构建和编码规范;

8、收银机 - G1 - 满100加一元赠送商品

需求描述

商店里进行购物结算时会使用收银机系统,这台收银机会在结算时根据客户的购物车中的商品和商店正在进行的优惠活动进行结算和打印购物小票。 已知商品信息包含:名称,数量单位,单价,类别和条形码(伪)。javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }

已知我们可以对收银机进行设置,使之支持各种优惠。 我们需要实现一个名为打印小票的小模块,该小模块接受指定格式输入,根据优惠策略计算价格,并输出指定格式的结算清单。

输入格式(样例):

javascript [ 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000003-2', 'ITEM000005', 'ITEM000005', 'ITEM000005' ]

其中对 'ITEM000001' 来说,标准的条形码是 'ITEM000001',数量是 1。 其中对 'ITEM000003-2' 来说, '-' 之前的是标准的条形码, '-' 之后的是数量。 当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。

该商店正在对部分商品进行“满100加一元换购”的优惠活动。解释: “满100加一元换购”是指,当整单商品每满100元,就可以加1元,购买指定商品. 假定满足优惠条件的情况下,消费者一定会参与优惠活动。

要求写代码支持上述的功能,并根据输入和设置的不同,输出以下格式的结算清单。

小票内容及格式(样例): 当购买结算商品时,符合“满100加一元换购”优惠条件时:
` *<没钱赚商店>购物清单
名称:可口可乐,数量:12瓶,单价:3.00(元),小计:36.00(元) 
名称:羽毛球,数量:15个,单价:1.00(元),小计:15.00(元) 
名称:苹果,数量:10斤,单价:5.50(元),小计:55.00(元) 
名称:可口可乐,数量:1个,单价:3.00(元),小计:1.00(元),优惠:2.00(元)

满100加一元换购商品: 名称:可口可乐,数量:1个


总计:107.00(元) 节省:2.00(元)


`

当购买结算商品时,没有符合“满100加一元换购”优惠条件时:
` *<没钱赚商店>购物清单
名称:可口可乐,数量:3瓶,单价:3.00(元),小计:9.00(元) 
名称:羽毛球,数量:5个,单价:1.00(元),小计:5.00(元) 
名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)

总计:25.00(元)


`

促销信息对象的格式(样例):javascript { type: 'FULL_100_PRESENT_1_PRODUCT', present: 'ITEM000000' }
注意:type是促销信息对象的主体结构,也可以适当扩展其它属性,以适应程序的扩展性。

作业要求

请完成全部需求,并输出样例格示的小票; 程序实现语言(JavaScript、C#、Java、Scala等)和实现形式(Console、Web、Desktop、APP等)不限; 请在保证实现代码的同时,尽量保持代码的整洁性、可读性、易于扩展和维护性等;

加分项

满足以下的条件(但并不仅限于这些条件),将会成为你的加分项:

良好的抽象和设计; 完善的测试,TDD开发; git小步提交; 良好的构建和编码规范;

收银机 - G1 - 全单满100减10块

面试作业

需求描述

商店里进行购物结算时会使用收银机系统,这台收银机会在结算时根据客户的购物车中的商品和商店正在进行的优惠活动进行结算和打印购物小票。

已知商品信息包含:名称,数量单位,单价,类别和条形码(伪)。数据结构如下:

javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }

已知我们可以对收银机进行设置,使之支持各种优惠。 我们需要实现一个名为打印小票的小模块,收银机会将输入的数据转换成一个JSON数据然后一次性传给我们这个小模块,我们将从控制台中输出结算清单的文本。

输入格式(样例):

javascript [ 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000003-2', 'ITEM000005', 'ITEM000005', 'ITEM000005' ]

其中对'ITEM000003-2'来说,"-"之前的是标准的条形码,"-"之后的是数量。 当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。

该商店正在对部分商品进行“全单满100减10块”的优惠活动。解释: “全单满100减10块”是指,每当整单算完之后,如果满100,则减去10元再收取,如果满200,则减去20元再收取。以此类推。 店员设置该优惠哪些条形码对应的商品参与此优惠,哪些条形码对应的商品不参与此优惠。享受此优惠的商品价格才能参与优惠价格计算,不享受此优惠的商品价格不参与优惠价格计算。

促销信息对象的数组格式(样例):

javascript [ { type: 'FULL_ONE_HUNDRED_MINUS_TEN', barcodes: [ 'ITEM000000', 'ITEM000001' ] } ]

注意:type和barcodes是促销信息对象的主体结构,也可以适当扩展其它属性,以适应程序的扩展性。

要求写代码支持上述的功能,并根据以上输入和设置的不同,输出下列小票。 小票内容及格式(样例):

当购买的商品符合“全单满100减10块”优惠条件,且有不参与此优惠的商品时: 
*<没钱赚商店>购物清单
名称:篮球,数量:1个,单价:98.00(元),小计:98.00(元) 
名称:可口可乐,数量:3瓶,单价:3.00(元),小计:9.00(元) 
名称:羽毛球,数量:5个,单价:1.00(元),小计:5.00(元) 
名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)

不参与优惠商品: 名称: 苹果,价格: 11.00(元) 参与优惠总价:102.00(元),优惠:10.00(元)


总计:113.00(元) 节省:10.00(元)


当购买的商品没有符合“全单满100减10块”优惠条件的商品时: 
*<没钱赚商店>购物清单
名称:可口可乐,数量:3瓶,单价:3.00(元),小计:9.00(元) 
名称:羽毛球,数量:5个,单价:1.00(元),小计:5.00(元) 
名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)

总计:25.00(元)


作业要求

请完成全部需求,并输出样例格示的小票; 程序实现语言(JavaScript、C#、Java、Scala等)和实现形式(Console、Web、Desktop、APP等)不限; 请在保证实现代码的同时,尽量保持代码的整洁性、可读性、易于扩展和维护性等;

加分项

满足以下的条件(但并不仅限于这些条件),将会成为你的加分项:

良好的抽象和设计; 完善的测试,TDD开发; git小步提交; 良好的构建和编码规范;

9、收银机 - G1 - 晚8点后打八折


需求描述

商店里进行购物结算时会使用收银机系统,这台收银机会在结算时根据客户的购物车中的商品和商店正在进行的优惠活动进行结算和打印购物小票。

  • 已知商品信息包含:名称,数量单位,单价,类别和条形码(伪)。以下是单个商品对象的结构:

    javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }

  • 已知我们可以对收银机进行设置,使之支持各种优惠。

我们需要实现一个名为打印小票的小模块,收银机会将输入的数据转换成一个JSON数据然后一次性传给我们这个小模块,我们将从控制台中输出结算清单的文本。

输入格式(样例):

javascript [ 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000003-2', 'ITEM000005', 'ITEM000005', 'ITEM000005' ]

其中对'ITEM000003-2'来说,"-"之前的是标准的条形码,"-"之后的是数量。 当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。

该商店正在对部分商品进行“晚8点后打八折”的优惠活动。解释:

  • “晚8点后打八折”是指,子类型为“蔬菜”的商品在结账时,如果结账时间在8点和当晚12点之间(含8点整和12点整),那么总价会打完八折再收取。
  • 店员设置该优惠的商品条码和折扣的比例。

要求写代码支持上述的功能,并根据输入和设置的不同,输出下列小票。

小票内容及格式(样例):

  • 当购买的商品中,有符合“单品打折”优惠条件的商品时:
` *<没钱赚商店>购物清单
打印时间:2014年08月04日 20:09:05 
名称:可口可乐,数量:3瓶,单价:3.00(元),小计:9.00(元) 
名称:羽毛球,数量:5个,单价:1.00(元),小计:5.00(元) 
名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元) 
名称:油麦菜,数量:2斤,单价:4.50(元),小计:7.20(元),优惠:1.80(元)

晚8点后打八折优惠商品: 名称:油麦菜,折扣:八折


总计:32.20(元) 节省:1.80(元)


`

数据格式

  1. 每一个商品对象的结构如下(样例):

    javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }

  2. 促销信息对象的数组格式(样例,只包含了主结构,可以根据需求自行扩展):

    javascript [ { type: 'Discount', barcodes: [ 'ITEM000000', 'ITEM000001' ] } ]

作业要求

  • 请完成全部需求,并输出样例格示的小票;
  • 程序实现语言(JavaScript、C#、Java、Scala等)和实现形式(Console、Web、Desktop、APP等)不限;
  • 请在保证实现代码的同时,尽量保持代码的整洁性、可读性、易于扩展和维护性等;

加分项

满足以下的条件(但并不仅限于这些条件),将会成为你的加分项:

  • 良好的抽象和设计;
  • 完善的测试,TDD开发;
  • git小步提交;
  • 良好的构建和编码规范;

10、收银机 - G1 - 全单满100减10块

需求描述

商店里进行购物结算时会使用收银机系统,这台收银机会在结算时根据客户的购物车中的商品和商店正在进行的优惠活动进行结算和打印购物小票。

已知商品信息包含:名称,数量单位,单价,类别和条形码(伪)。数据结构如下:

javascript { barcode: 'ITEM000000', name: '可口可乐', unit: '瓶', category: '食品', subCategory: '碳酸饮料', price: 3.00 }

已知我们可以对收银机进行设置,使之支持各种优惠。 我们需要实现一个名为打印小票的小模块,收银机会将输入的数据转换成一个JSON数据然后一次性传给我们这个小模块,我们将从控制台中输出结算清单的文本。

输入格式(样例):

javascript [ 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000001', 'ITEM000003-2', 'ITEM000005', 'ITEM000005', 'ITEM000005' ]

其中对'ITEM000003-2'来说,"-"之前的是标准的条形码,"-"之后的是数量。 当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。

该商店正在对部分商品进行“全单满100减10块”的优惠活动。解释: “全单满100减10块”是指,每当整单算完之后,如果满100,则减去10元再收取,如果满200,则减去20元再收取。以此类推。 店员设置该优惠哪些条形码对应的商品参与此优惠,哪些条形码对应的商品不参与此优惠。享受此优惠的商品价格才能参与优惠价格计算,不享受此优惠的商品价格不参与优惠价格计算。

促销信息对象的数组格式(样例):

javascript [ { type: 'FULL_ONE_HUNDRED_MINUS_TEN', barcodes: [ 'ITEM000000', 'ITEM000001' ] } ]

注意:type和barcodes是促销信息对象的主体结构,也可以适当扩展其它属性,以适应程序的扩展性。

要求写代码支持上述的功能,并根据以上输入和设置的不同,输出下列小票。 小票内容及格式(样例):

当购买的商品符合“全单满100减10块”优惠条件,且有不参与此优惠的商品时: 
*<没钱赚商店>购物清单
名称:篮球,数量:1个,单价:98.00(元),小计:98.00(元) 
名称:可口可乐,数量:3瓶,单价:3.00(元),小计:9.00(元) 
名称:羽毛球,数量:5个,单价:1.00(元),小计:5.00(元) 
名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)

不参与优惠商品: 名称: 苹果,价格: 11.00(元) 参与优惠总价:102.00(元),优惠:10.00(元)


总计:113.00(元) 节省:10.00(元)


当购买的商品没有符合“全单满100减10块”优惠条件的商品时: 
*<没钱赚商店>购物清单
名称:可口可乐,数量:3瓶,单价:3.00(元),小计:9.00(元) 
名称:羽毛球,数量:5个,单价:1.00(元),小计:5.00(元) 
名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)

总计:25.00(元)


作业要求

请完成全部需求,并输出样例格示的小票; 程序实现语言(JavaScript、C#、Java、Scala等)和实现形式(Console、Web、Desktop、APP等)不限; 请在保证实现代码的同时,尽量保持代码的整洁性、可读性、易于扩展和维护性等;

加分项

满足以下的条件(但并不仅限于这些条件),将会成为你的加分项:

良好的抽象和设计; 完善的测试,TDD开发; git小步提交; 良好的构建和编码规范;

全部评论
←_←
点赞 回复 分享
发布于 2016-05-17 10:44
只点赞 不关注
点赞 回复 分享
发布于 2016-05-18 16:10
排版感人呐
点赞 回复 分享
发布于 2016-05-19 22:08
提交代码后,才能选女神吗?
点赞 回复 分享
发布于 2016-05-20 12:03
好像全是前端的。。
点赞 回复 分享
发布于 2016-05-23 13:09
程序实现语言(JavaScript、C#、Java、Scala等),等里面有没有c++。。。。
点赞 回复 分享
发布于 2016-05-24 19:02
从2016到现在,都出的一样的题
点赞 回复 分享
发布于 2022-09-02 10:11 陕西

相关推荐

头像
10-16 09:58
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
6 88 评论
分享
牛客网
牛客企业服务