10道算法题,来自于gitchat王晓华的《算法应该怎么“玩”》专栏。
1. 农夫需要把狼、羊、菜和自己运到河对岸去,只有农夫能够划船,而且船比较小,除农夫之外每次只能运一种东西,还有一个棘手问题,就是如果没有农夫看着,羊会偷吃菜,狼会吃羊。请考虑一种方法,让农夫能够安全地安排这些东西和他自己过河。
2. 请你把10根放在篮子里的香蕉分给10只猴子,每只猴要得到一根,最后篮子里还要留下一根香蕉,你能做到吗?
3. 你让一个工人为你工作七天,用一根金条作为报酬。金条被分成7小块,可以每天支付一块。但是,如果你只能将金条切割两次,那么你如何切割金条,能满足每天支付一块给工人呢?
4. 你有不限量的水,还有两个水桶,容积分别是5升和3升。如何精确地称量出4升水?
5. 现在有三个容积分别是3升、5升和8升的水桶,其中容积为8升的水桶中装满了水,容积为3升和容积为5升的水桶是空的。三个水桶都没有体积刻度,现在需要将大水桶中的8升水等分成两份,每份都是4升水,(附加条件是只能使用另外两个空水桶)
6. 现在有两种砖,分别是1*1的砖和1*2的砖,用这两种砖铺1*N的地面。问共有多少种铺法?(输入为N,请输出相应的铺法数,经典铺砖问题)
7. 12个高矮不同的人,排成两排,每排必须是从矮到高排列,且第二排比第一排对应的人高。求排列方式有多少种?
8. 从一副扑克中随机抽取5张牌,判断是不是顺子(5张牌数字连续,大小王为任意数字)。
9. 输入两个整数n和m,从数列1,2,3......n中随机取几个数,使其和等于m,要求将其中所有的可能组合列出来。
10. 输入一个正整数n,输出所有和为n的连续正整数序列。