“有道难题——编程挑战赛”,如何为实习生安排座位

今天买了一本9月的《程序员》,看到“有道难题——编程挑战赛”的一道试题,虽然杂志上有刊登思路和关键部分的原代码,但是我觉得还是自己独立写写最好玩,所以就用Python写了个解答,不敢保证100%正确,但是至少通过了我自己写的十几个测试^_^

 

如果有哪位朋友发现有bug,欢迎指正~

 

另外我发现这位仁兄发了好多“有道难题”的C语言解答 ,包括本题,各位可以参考。

 

题目如下:

 

Problem Statement 500’

    

有道最近招聘了一批实习生,给他们安排座位时遇到了一个有趣的问题。办公室有N排,每排有M 个座位。为了方便实习生和全职员工更好的交流,安排座位时,我们不让任何2个实习生座位水平,竖直或者对角线相邻。

给定一个vector <string> intern , 把intern 的每个元素依次拼接起来得到一串以单个空格隔开的数字。这串数刚好有N个,第i个数字表示安排在第i排的实习生数量。请计算满足条件的座位安排方案总数。因为总数可能过大,返回方案总数除以1000000007的余数。

Definition

    
Class:YoudaoIntern
Method:numberOfWays
Parameters:int, vector <string>
Returns:int
Method signature:int numberOfWays(int M, vector <string> intern)
(be sure your method is public)
    
 

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能够自动计算长整数,虽然这样会导致程序变慢...另外,我的函数的输入也不是字符串,因为本来就是想得到一些列的整数嘛,直接给整数就好了,从字符串变过来不是自己给自己找麻烦嘛...我又不是为了参加竞赛...)

 

 

测试程序:

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值