题目
简单谜题
士兵摆渡
题目概述
25个士兵组成的小分队需要渡河,可是河宽且水深,周围也看不到桥。他们发现河岸边有一个小船,两个12岁的男孩正在上面玩耍。船很小,仅能承载两个男孩或一个士兵的重量。士兵应怎样渡河?在你用的算法中,船从一个岸边到另一个岸边来回共计几次?
解答
考虑到船一次只能载一个士兵,那么每一次就有一个士兵驾船前去对岸,再由1个小孩驾船回来。一次可以将2个小孩运载至对岸。那么过程就很清晰了:2个男孩过河->1个男孩回来->一个士兵过河->另1个男孩驾船回来,重复至所有士兵都渡河完成。那么这样一来,船一共靠岸100次。
伪代码实现
1 | public void soldiersCrossRiver(int numberOfSoldiers){ |
行列变换
题目概述
图2.1 行列变换前的数字阵列
图2.1 行列变换后的数字阵列
怎样才能将图一中的数字阵列进行变换得到图二?要求只能进行行列变换。
解答
线性代数的知识告诉我们,对行列式进行行列变换不改变元素的相对位置。因此答案是不可以的。
伪代码实现
1 | // 不存在的 |
数数的手指
题目概述
一个小女孩正在用左手手指数数,从1数到1000。她从拇指算作1开始数起,然后,食指为2,中指为3,无名指为4,小指为5。接下来调转方向,无名指算作6,中指为7,食指为8,大拇指为9,接下来,食指算作10,如此反复。问如果她继续按这种方式数下去,最后结束时是停在哪根手指上?
解答
我们不妨先看下前几个数字,找找规律:
前几位数字与手指的匹配规律
具体的判断方法就不用我多说了8。当数数到1000时,对应的手指是食指。
伪代码实现
1 | public Finger getTheFinger(int countNumber){ |
