鱼C论坛

 找回密码
 立即注册
查看: 2101|回复: 7

[已解决]大家看看这个怎么实现

[复制链接]
发表于 2016-1-16 19:42:32 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我自己写的有问题

wine = 5
result = 0
g = 0
p = 0

while wine >= 0:
   
    wine -= 1
    p += 1
    g += 1
    if g ==4:
        wine += 1
        result += 1
    if p ==2:
        wine += 1
        result += 1
        
    print(result)
   
   
最佳答案
2016-1-16 22:59:10
一共喝了20瓶。
  1. def calc():
  2.     global beer, cap, bottle, newbeer
  3.     newbeer = (cap // 4  if cap > 0 else 0)+ (bottle //2 if bottle > 0 else 0)
  4.     cap = cap % 4 if cap > 0 else cap
  5.     bottle = bottle % 2 if bottle > 0 else bottle
  6.     cap += newbeer
  7.     bottle += newbeer
  8.     beer += newbeer
  9.    

  10. beer = 5
  11. cap = 5
  12. bottle = 5
  13. print('beer=%s,cap=%s, bottle=%s'%(beer, cap, bottle))
  14. while cap >3 or bottle >1:
  15.     calc()
  16.     print('newbeer = %s'%newbeer)
  17.     print('beer=%s,cap=%s, bottle=%s'%(beer, cap, bottle))
  18. #到此喝到15瓶
  19. #借一个瓶盖
  20. cap += 1
  21. calc()
  22. #还掉
  23. cap -= 1
  24. print('newbeer = %s'%newbeer)
  25. print('beer=%s,cap=%s, bottle=%s'%(beer, cap, bottle))
  26. calc()
  27. print('newbeer = %s'%newbeer)
  28. print('beer=%s,cap=%s, bottle=%s'%(beer, cap, bottle))
  29. #借一个瓶
  30. bottle += 1
  31. calc()
  32. bottle -= 1
  33. #还掉
  34. print('newbeer = %s'%newbeer)
  35. print('beer=%s,cap=%s, bottle=%s'%(beer, cap, bottle))
  36. #借两个瓶盖
  37. cap += 2
  38. calc()
  39. cap -= 2
  40. #还掉
  41. print('newbeer = %s'%newbeer)
  42. print('beer=%s,cap=%s, bottle=%s'%(beer, cap, bottle))
  43. #借一个瓶
  44. bottle += 1
  45. calc()
  46. bottle -= 1
  47. #还掉
  48. print('newbeer = %s'%newbeer)
  49. print('beer=%s,cap=%s, bottle=%s'%(beer, cap, bottle))
复制代码


输出
  1. beer=5,cap=5, bottle=5
  2. newbeer = 3
  3. beer=8,cap=4, bottle=4
  4. newbeer = 3
  5. beer=11,cap=3, bottle=3
  6. newbeer = 1
  7. beer=12,cap=4, bottle=2
  8. newbeer = 2
  9. beer=14,cap=2, bottle=2
  10. newbeer = 1
  11. beer=15,cap=3, bottle=1
  12. newbeer = 1
  13. beer=16,cap=0, bottle=2
  14. newbeer = 1
  15. beer=17,cap=1, bottle=1
  16. newbeer = 1
  17. beer=18,cap=2, bottle=0
  18. newbeer = 1
  19. beer=19,cap=-1, bottle=1
  20. newbeer = 1
  21. beer=20,cap=0, bottle=0
复制代码
image.jpeg
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-1-16 22:59:10 | 显示全部楼层    本楼为最佳答案   
一共喝了20瓶。
  1. def calc():
  2.     global beer, cap, bottle, newbeer
  3.     newbeer = (cap // 4  if cap > 0 else 0)+ (bottle //2 if bottle > 0 else 0)
  4.     cap = cap % 4 if cap > 0 else cap
  5.     bottle = bottle % 2 if bottle > 0 else bottle
  6.     cap += newbeer
  7.     bottle += newbeer
  8.     beer += newbeer
  9.    

  10. beer = 5
  11. cap = 5
  12. bottle = 5
  13. print('beer=%s,cap=%s, bottle=%s'%(beer, cap, bottle))
  14. while cap >3 or bottle >1:
  15.     calc()
  16.     print('newbeer = %s'%newbeer)
  17.     print('beer=%s,cap=%s, bottle=%s'%(beer, cap, bottle))
  18. #到此喝到15瓶
  19. #借一个瓶盖
  20. cap += 1
  21. calc()
  22. #还掉
  23. cap -= 1
  24. print('newbeer = %s'%newbeer)
  25. print('beer=%s,cap=%s, bottle=%s'%(beer, cap, bottle))
  26. calc()
  27. print('newbeer = %s'%newbeer)
  28. print('beer=%s,cap=%s, bottle=%s'%(beer, cap, bottle))
  29. #借一个瓶
  30. bottle += 1
  31. calc()
  32. bottle -= 1
  33. #还掉
  34. print('newbeer = %s'%newbeer)
  35. print('beer=%s,cap=%s, bottle=%s'%(beer, cap, bottle))
  36. #借两个瓶盖
  37. cap += 2
  38. calc()
  39. cap -= 2
  40. #还掉
  41. print('newbeer = %s'%newbeer)
  42. print('beer=%s,cap=%s, bottle=%s'%(beer, cap, bottle))
  43. #借一个瓶
  44. bottle += 1
  45. calc()
  46. bottle -= 1
  47. #还掉
  48. print('newbeer = %s'%newbeer)
  49. print('beer=%s,cap=%s, bottle=%s'%(beer, cap, bottle))
复制代码


输出
  1. beer=5,cap=5, bottle=5
  2. newbeer = 3
  3. beer=8,cap=4, bottle=4
  4. newbeer = 3
  5. beer=11,cap=3, bottle=3
  6. newbeer = 1
  7. beer=12,cap=4, bottle=2
  8. newbeer = 2
  9. beer=14,cap=2, bottle=2
  10. newbeer = 1
  11. beer=15,cap=3, bottle=1
  12. newbeer = 1
  13. beer=16,cap=0, bottle=2
  14. newbeer = 1
  15. beer=17,cap=1, bottle=1
  16. newbeer = 1
  17. beer=18,cap=2, bottle=0
  18. newbeer = 1
  19. beer=19,cap=-1, bottle=1
  20. newbeer = 1
  21. beer=20,cap=0, bottle=0
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-17 01:48:23 From FishC Mobile | 显示全部楼层
冬雪雪冬 发表于 2016-1-16 22:59
一共喝了20瓶。



先谢了,你的程序结果是没问题,但是到15瓶后,是不是还有办法改进啊?这样一借一还这得看着程序结果改代码啊!而且现在只是5瓶,要是再多不是更麻烦了?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-17 20:50:57 | 显示全部楼层
aozhenlh 发表于 2016-1-17 01:48
先谢了,你的程序结果是没问题,但是到15瓶后,是不是还有办法改进啊?这样一借一还这得看着程序结果改代 ...

如果不想改代码就要在while循环做比较复杂的判断来实现借与还的操作。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-17 21:37:09 | 显示全部楼层
本帖最后由 kunaiai 于 2016-1-17 21:40 编辑

不过4盖换1和2空瓶换1的参数不能变  变了貌似有问题
  1. def nBeer(para):#不用借的情况
  2.     global haveCap,haveBot,haveBeer
  3.     while haveCap >= para['cap'] or haveBot>= para['bot']:
  4.         #瓶盖换啤酒
  5.         if haveCap > 0:
  6.             newBeer = haveCap // para['cap']
  7.             haveCap %= para['cap']
  8.             haveBeer += newBeer
  9.             haveCap += newBeer
  10.             haveBot += newBeer

  11.         #空瓶换啤酒
  12.         if haveBot > 0:
  13.             newBeer = haveBot //  para['bot']
  14.             haveBot %= para['bot']
  15.             haveBeer += newBeer
  16.             haveCap += newBeer
  17.             haveBot += newBeer

  18. def mBeer(para):#需要借的情况
  19.    
  20.     global haveCap,haveBot,haveBeer
  21.    
  22.     while 1:
  23.         
  24.         print(1,haveBeer,haveCap,haveBot)
  25.         if haveCap + 1 == para['cap']:
  26.             haveCap += 1
  27.             print('借1个盖子')
  28.             nBeer(para)
  29.             haveCap -= 1
  30.         elif haveCap + 2 == para['cap']:
  31.             haveCap += 2
  32.             print('借2个盖子')
  33.             nBeer(para)
  34.             haveCap -= 2
  35.         elif haveBot + 1 == para['bot']:
  36.             haveBot += 1
  37.             print('借1个空瓶')
  38.             nBeer(para)
  39.             haveBot -= 1
  40.         else:
  41.             break

  42. para = {'unit':2,'cap':4,'bot':2,'allMon':10}

  43. haveBeer =  para['allMon'] // para['unit']
  44. haveCap = haveBeer #杯盖
  45. haveBot = haveBeer #空瓶
  46. nBeer(para)
  47.    
  48. print(haveBeer,haveCap,haveBot)
  49. mBeer(para)

  50. print(haveBeer,haveCap,haveBot)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-18 12:19:26 | 显示全部楼层
  1. # 暴力。
  2. beer = 5
  3. empty_bottle = 5
  4. cap = 5

  5. def calc_embot(redu=0):
  6.         global beer, empty_bottle, cap
  7.         # 可交换数额。
  8.         exchange = empty_bottle // 2
  9.         # 交换后剩余。
  10.         empty_bottle = empty_bottle % 2
  11.         # 共喝几瓶。
  12.         beer += exchange
  13.         # 喝完后剩余瓶盖。
  14.         cap += exchange
  15.         # 喝完后剩余空瓶。
  16.         empty_bottle += exchange
  17.         # 是否有借的。
  18.         empty_bottle -= redu

  19.         if cap > 0:
  20.                 if cap >= 4:
  21.                         calc_cap()
  22.                 else:
  23.                         temp = 4 - cap
  24.                         cap += temp
  25.                         calc_cap(temp)
  26.                 if empty_bottle > 0:
  27.                         if empty_bottle >= 2:
  28.                                 calc_embot()
  29.                         else:
  30.                                 temp = 2 - empty_bottle
  31.                                 empty_bottle += temp
  32.                                 calc_embot(temp)


  33. def calc_cap(redu=0):
  34.         global beer, empty_bottle, cap

  35.         exchange = cap // 4
  36.         cap = cap % 4
  37.         beer += exchange
  38.         empty_bottle += exchange
  39.         cap += exchange
  40.         cap -= redu
  41.         if empty_bottle > 0:
  42.                 if empty_bottle >= 2:
  43.                         calc_embot()
  44.                 else:
  45.                         temp = 2 - empty_bottle
  46.                         empty_bottle += temp
  47.                         calc_embot(temp)
  48.         if cap > 0:
  49.                 if cap >= 4:
  50.                         calc_cap()
  51.                 else:
  52.                         temp = 4 - cap
  53.                         cap += temp
  54.                         calc_cap(temp)


  55. calc_embot()
  56. print(beer)
复制代码

  1. # 不暴力。
  2. beer = 5
  3. i = 1

  4. while 1:
  5.         if i / 4 + i / 2 + beer == i:
  6.                 print(i)
  7.                 break
  8.         else:
  9.                 i += 1
复制代码

允许欠着先喝的情况。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-19 19:01:16 | 显示全部楼层
牛,看不懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-13 22:04:16 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-19 07:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表