喝啤酒带赊账
来源:互联网 发布:淘宝旺铺有什么好处 编辑:程序博客网 时间:2024/04/29 19:42
规则是:2元一瓶啤酒,两个空瓶兑换一瓶啤酒,四个瓶盖兑换一瓶啤酒, 可以赊瓶酒,结账的时候还啤酒即可。
不赊账喝:int nCount = [[[NSDrinkBeer alloc]init]DrinkWithMoney:10];
不赊账喝:int nCount = [[[NSDrinkBeer alloc]init]DrinkWithMoney:10];
可赊账喝:int nCount = [[[NSDrinkBeer alloc]init]DrinkCanCreditWithMoney:10];
//// NSDrinkBeer.h// FlashlightCam//// Created by jxs on 2017/7/13.////#import <Foundation/Foundation.h>//多少钱一瓶#define ONE_BEER_PER_MONEY 2//多少个瓶盖一瓶#define ONE_BEER_PER_CAP 4//多少个空瓶一瓶#define ONE_BEER_PER_BOTTLE 2//是否允许赊账#define ONPEN_CREDIT_BEER true@interface NSBeer : NSObject //啤酒类{ }@property bool isDrinked;//是否被喝了@property bool unUsedCap;//瓶盖是否被使用了@property bool unUsedEmptyBottle;//空瓶是否被使用了@end@interface NSDrinkBeer : NSObject{ NSMutableArray *m_aryBasket;//酒篮子 int nAutoCreditNum ;//赊账啤酒}-(NSMutableArray*) BuyBeerWithMoney:(int)nMoney;//用钱买啤酒-(int) DrinkBeer:(NSMutableArray*)aryBasket;//喝啤酒,返回喝了多少瓶-(NSMutableArray*) BuyBeerWithCap:(NSMutableArray*)aryBasket;//用瓶盖买啤酒-(NSMutableArray*) BuyBeerWithBottle:(NSMutableArray*)aryBasket;//用空瓶买啤酒-(int) DrinkWithMoney:(int)nMoney;//拿钱尽情喝啤酒,返回总数-(int) DrinkCanCreditWithMoney:(int)nMoney;//拿钱尽情喝啤酒,且可以赊啤酒,还啤酒,返回总数@end
//// NSDrinkBeer.m// FlashlightCam//// Created by jxs on 2017/7/13.////#import "NSDrinkBeer.h"@implementation NSBeer@end@implementation NSDrinkBeer-(NSMutableArray*) BuyBeerWithMoney:(int)nMoney//用钱买啤酒{ int nBuyBeers = nMoney/ONE_BEER_PER_MONEY;//2元一瓶 if (nBuyBeers<=0)return nil; for(int i=0;i<nBuyBeers;i++) { NSBeer*pBeer = [[NSBeer alloc]init]; if (m_aryBasket==nil) m_aryBasket = [[NSMutableArray alloc]initWithObjects:pBeer,nil]; else [m_aryBasket addObject:pBeer]; } return m_aryBasket;}-(NSArray*) BuyBeerWithCap:(NSMutableArray*)aryBasket//用瓶盖买啤酒{ NSMutableArray *pDH_basket = nil;//店家用来保存兑换啤酒的篮子 NSMutableArray *pAdd_basket = nil; for(id myobj in aryBasket) { NSBeer*pBeer = (NSBeer*)myobj; if (pBeer) { if (!pBeer.isDrinked) { NSLog(@"啤酒没有喝,这瓶不能兑换!"); continue; } else { if (!pBeer.unUsedCap) { if (pDH_basket==nil) pDH_basket = [[NSMutableArray alloc]initWithObjects:pBeer,nil]; else [pDH_basket addObject:pBeer]; if (pDH_basket.count>=ONE_BEER_PER_CAP)//满足4个盖子兑换一瓶 { for(id capobj in pDH_basket) { NSBeer*pCapBeer = (NSBeer*)capobj; pCapBeer.unUsedCap = YES; } //添加一瓶啤酒 NSBeer*pNewAdBeer = [[NSBeer alloc]init]; if (pAdd_basket==nil) pAdd_basket = [[NSMutableArray alloc]initWithObjects:pNewAdBeer,nil]; else [pAdd_basket addObject:pNewAdBeer]; [pDH_basket removeAllObjects];//兑换完毕清空篮子 } } } } } if (pAdd_basket&&pAdd_basket.count>0)[aryBasket addObjectsFromArray:pAdd_basket]; return aryBasket;}-(NSArray*) BuyBeerWithBottle:(NSMutableArray*)aryBasket//用空瓶买啤酒{ NSMutableArray *pDH_basket = nil;//店家用来保存兑换啤酒的篮子 NSMutableArray *pAdd_basket = nil; for(id myobj in aryBasket) { NSBeer*pBeer = (NSBeer*)myobj; if (pBeer) { if (!pBeer.isDrinked) { NSLog(@"啤酒没有喝,这瓶不能兑换!"); continue; } else { if (!pBeer.unUsedEmptyBottle) { if (pDH_basket==nil) pDH_basket = [[NSMutableArray alloc]initWithObjects:pBeer,nil]; else [pDH_basket addObject:pBeer]; if (pDH_basket.count>=ONE_BEER_PER_BOTTLE)//满足2个空瓶子兑换一瓶 { for(id capobj in pDH_basket) { NSBeer*pCapBeer = (NSBeer*)capobj; pCapBeer.unUsedEmptyBottle = YES; } //添加一瓶啤酒 NSBeer*pNewAdBeer = [[NSBeer alloc]init]; if (pAdd_basket==nil) pAdd_basket = [[NSMutableArray alloc]initWithObjects:pNewAdBeer,nil]; else [pAdd_basket addObject:pNewAdBeer]; [pDH_basket removeAllObjects];//兑换完毕清空篮子 } } } } } if (pAdd_basket&&pAdd_basket.count>0)[aryBasket addObjectsFromArray:pAdd_basket]; return aryBasket;}-(int) GetCanDrinkBeerCount:(NSMutableArray*)aryBasket//获取可以喝的啤酒数量{ int nDrinkedCount =0; for(id myobj in aryBasket) { NSBeer*pBeer = (NSBeer*)myobj; if (pBeer&&!pBeer.isDrinked) { nDrinkedCount++; } } return nDrinkedCount;}-(bool) IsMoreCapOrBottle:(NSMutableArray*)aryBasket//是否有瓶盖或瓶子多余{ for(id myobj in aryBasket) { NSBeer*pBeer = (NSBeer*)myobj; if (pBeer) { if (!pBeer.isDrinked) { NSLog(@"啤酒没有喝,这瓶不能兑换!"); continue; } else if (!pBeer.unUsedEmptyBottle||!pBeer.unUsedCap) { return true; } } } return false;}-(int) DrinkBeer:(NSMutableArray*)aryBasket//喝啤酒,返回喝了多少瓶{ if (aryBasket==nil||aryBasket.count<=0) return 0; int nDrinkedCount =0; for(id myobj in aryBasket) { NSBeer*pBeer = (NSBeer*)myobj; if (pBeer&&!pBeer.isDrinked) { nDrinkedCount++; NSLog(@"喝了第%d瓶啤酒",nDrinkedCount); pBeer.isDrinked = true; } } return nDrinkedCount;}-(int) DrinkWithMoney:(int)nMoney//拿钱尽情喝啤酒,返回总数{ if (m_aryBasket&&m_aryBasket.count>0)[m_aryBasket removeAllObjects]; nAutoCreditNum= 0; NSMutableArray *pbasket =[self BuyBeerWithMoney:nMoney]; while ([self DrinkBeer:pbasket]) { pbasket=[self BuyBeerWithCap:pbasket]; pbasket=[self BuyBeerWithBottle:pbasket]; } NSLog(@"我用%d元喝了%d瓶啤酒,到底多少钱喝酒划算?",nMoney,(int)pbasket.count); return (int)pbasket.count;}-(int) DrinkCanCreditWithMoney:(int)nMoney//拿钱尽情喝啤酒,且可以赊啤酒,还啤酒,返回总数{ if (!ONPEN_CREDIT_BEER) [self DrinkWithMoney:nMoney];//不能赊账则直接喝; int nXNum = 0;//赊账数量 //实际最大赊账不能超过购买量,但我们给最大两倍的购买量的赊账 int nMaxDrink =0,nMaxXNumValue =0; for (int i = 0; i<=nMoney*2/ONE_BEER_PER_MONEY; i++) { nXNum = i; int nDrinkValue = [self DrinkWithMoney:nMoney+ONE_BEER_PER_MONEY*nXNum]-[self DrinkWithMoney:ONE_BEER_PER_MONEY*nXNum]; if (nDrinkValue>nMaxDrink) { nMaxDrink = nDrinkValue; nMaxXNumValue = nXNum; NSLog(@"我用%d元赊账%d瓶,喝了%d瓶啤酒!",nMoney,nXNum,nDrinkValue); } } NSLog(@"最后我用%d元赊账%d瓶,喝了%d瓶啤酒!",nMoney,nMaxXNumValue,nMaxDrink); return nMaxDrink;}@end
阅读全文
0 0
- 喝啤酒带赊账
- 七类人不宜喝啤酒
- 程序员喝啤酒
- 喝啤酒问题
- 喝啤酒这件小事
- 喝啤酒案例[java编写]
- Drools -喝啤酒问题
- 喝白酒与啤酒的区别
- 10块钱可以喝多少瓶啤酒
- 最多能喝多少瓶啤酒呢?
- 研究发现适量喝啤酒可增进骨骼健康
- 爱喝啤酒的程序员是如何学习数据结构的
- 你知道吃烧烤喝啤酒的危害性吗?
- 边吃烧烤边喝啤酒引发疾病
- 这天气昭示着喝啤酒的季节到 了
- 喝啤酒(预防老年痴呆的深度搜索)
- 一道面试题,总共能喝多少瓶啤酒
- 喝N瓶啤酒,3个空瓶换一瓶新啤酒,总共喝了多少瓶的递归算法
- Js中 isNaN()函数
- Android 反编译
- 第七章项目成本管理
- Java实现表达式解析--入门篇
- 有序广播
- 喝啤酒带赊账
- Java中jspf文件的作用
- 浅析Java Object Serialization与 Hadoop 序列化
- sql 查询和删除冗余数据
- NYOJ-士兵杀敌(三) 线段树RMQ算法求区间的最大差值
- Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals)
- 关于Activity class {package/class} does not exist
- Seasar如何执行自定义SQL语句-yellowcong
- 用存储过程生成分页的where条件拼接SQL