实例
谁能赢得最后的糖块?
第一步:如果现在有10块糖,两人轮流拿,每人只能拿1到2块糖,谁拿到了最后的糖块,谁胜出。请设计一个程序进行人机游戏,保证机器每次都赢。
第二步:继续完善上面的案例,要求1) 可以通过屏幕输入设置糖块的个数;2) 对人为输入的糖块进行合理性判断,如果不是1块或者2块,要求重新输入。根据输入糖块的总数判断机器先拿还是人先拿,总之最终保证经过多轮游戏之后,机器胜出。
思路历程:
程序最终运行结果:保证机器每次都赢
分析程序结束条件:
当机器人拿到最后一份糖块(1块或2块),即当机器人拿完糖块之后,剩余糖块为0,则机器人获胜
程序模拟:
首先以10个糖为模板进行推导:
当机器进行拿糖前,如果剩余糖为1或2,则机器必然会赢得比赛
往前回溯
人拿到1或2个糖之后,剩余1或2个糖,即人拿糖之前,剩余3个糖
继续往前回溯
机器拿到1或2个糖后给人剩余3个糖,那么机器拿糖之前,有5个糖或4个糖
有5个糖时,机器拿走2个,有4个糖时,机器拿走1个,则人必然会输掉比赛
再往前回溯
当机器拿糖前有7个糖