今天买了一本9月的《程序员》,看到“有道难题——编程挑战赛”的一道试题,虽然杂志上有刊登思路和关键部分的原代码,但是我觉得还是自己独立写写最好玩,所以就用Python写了个解答,不敢保证100%正确,但是至少通过了我自己写的十几个测试^_^
如果有哪位朋友发现有bug,欢迎指正~
另外我发现这位仁兄发了好多“有道难题”的C语言解答 ,包括本题,各位可以参考。
题目如下:
Problem Statement 500’ | |||||||||||||
有道最近招聘了一批实习生,给他们安排座位时遇到了一个有趣的问题。办公室有N排,每排有M 个座位。为了方便实习生和全职员工更好的交流,安排座位时,我们不让任何2个实习生座位水平,竖直或者对角线相邻。 给定一个vector <string> intern , 把intern 的每个元素依次拼接起来得到一串以单个空格隔开的数字。这串数刚好有N个,第i个数字表示安排在第i排的实习生数量。请计算满足条件的座位安排方案总数。因为总数可能过大,返回方案总数除以1000000007的余数。 | |||||||||||||
Definition | |||||||||||||
| |||||||||||||
Constraints | |||||||||||||
- | M 在1到15之间,含1和15。 | ||||||||||||
- | intern 有1到50个元素,含1和50。 | ||||||||||||
- | intern 的每个元素包含1到50个字符,含1和50。 | ||||||||||||
- | intern 所有元素拼接起来后,会得到一串以单个空格隔开的数字,数字不会以0开始,这串数不会以空格开始或结尾,也不会有连续的空格。 | ||||||||||||
- | intern 元素拼接得到的数字串包含1到200个数字,含1到200,每个数字大小在0到M 之间,含0和M 。 |
Python语言的解答程序:
(注意,我的答案并没有按照题目要求取1000000007的余数,因为Python能够自动计算长整数,虽然这样会导致程序变慢...另外,我的函数的输入也不是字符串,因为本来就是想得到一些列的整数嘛,直接给整数就好了,从字符串变过来不是自己给自己找麻烦嘛...我又不是为了参加竞赛...)
测试程序: