ITPub博客

首页 > 数据库 > 数据库开发技术 > 【每周一坑】神奇的九宫格

【每周一坑】神奇的九宫格

原创 数据库开发技术 作者:Crossin的编程教室 时间:2017-05-05 15:41:39 0 删除 编辑

五一小长假大家应该玩的挺开心吧,还沉浸在假日的愉悦中么?请大家收收心,准备准备月底的端午节。

看看本周的题目吧,本周的题目由读者 @疯琴 提供,我们做了小小的改进,题目为数字填充 9 宫格。

给定一个 3 * 3 的九宫格和 1 - 9 九个数字,将 9 个数字按照一定的规则填充进九宫格内,使九宫格内横、竖、斜每条线的和都相等,输出至少一种结果。

示例:

def Jiugongge():
    '''
    >>>Jiugongge()
    4 9 2 
    3 5 7
    8 1 6
    '''

附加题:

给定一个正整数 N(N >= 1),将 1 - N^2 填充到 N * N 的格子中,使横、竖、斜(对角线)每条线的和都相等,输出至少一种组合。

比如 N 等于 3 时就是 9 宫格, N 等于 4 时为 16 宫格。

def Jiugongge(n):
    '''
    >>>Jiugongge(n=3)
    4 9 2 
    3 5 7
    8 1 6
    >>>Jiugongge(n=4)
    16 2  3  13
    5  11 10 8
    9  7  6  12
    4  14 15 1
    '''

【求乘积最大】解答

再来看看上周的题目:

设定一个长度为 N 的数字串,将其分为两部分,找出一个切分位置,使两部分的乘积值最大,并返回最大值。

解决问题的核心在于如何将数字串依次分为两部分,大部分同学的思路为将数字串转为字符串,然后使用切片。也有同学直接使用整数除法 // 和 求余 % 分别得到两部分,以下分别给出代码

解法一:

def product(num):
    # 数字转为字符串
    num2str = str(num)    
   # 预设最大的结果    max_num = 0    len_str = len(num2str)    
   for i in range(1,len_str):        
       # 分别得到字符串两边        left = num2str[:i]        right = num2str[i:]        res = int(left) * int(right)        
       # 如果现在的乘积超过目前的乘积,则更新最大值        if res > max_num:            max_num = res    
   return max_num print(product(123456))

使用这种方法的同学比较多,参考以下同学代码:
严迪 : https://gist.github.com/kFTY/5ac7d1c224ddb44aecec7c8a51aa2ba7
奔跑的笤帚把子:http://paste.ubuntu.com/24490799/
王任 : http://paste.ubuntu.com/24493309/
大多数同学都采用这种方法,就不一一  @ 所有了。

解法二:

def product(num):
    # 转为字符串并获取长度
    len_str = len(str(num))    
   # 预设最大值    max_num = 0    for i in range(1,len_str):        
       # 分别得到数字两边        left = num//(10**i)        right = num%(10**i)        res = left * right        
       # 判断是否更新        if res > max_num:            max_num = res    
   return max_num print(product(123456))

使用本方法的同学就比较少了,参考 bolin 的代码
地址:http://paste.ubuntu.com/24471760/
附加题就是在上题的基础之上,对数字进行打乱处理,代码如下:

def product_2(num):
    num2str = str(num)
    max_num = 0
    for n in itertools.permutations(num2str):
        mixnumber = "".join(n)        
       # 调用之前的 product 函数        res = product(int(mixnumber))        
       if res > max_num:            max_num = res    
   return max_num

最后,还可以看看 张贺 同学的答案,两行代码解决一个问题。
地址:http://paste.ubuntu.com/24472288/




『码上行动』在线学习班正在开放中,详情回复 码上行动

近期文章推荐阅读:

喏,你们要的 PyCharm 快速上手指南

给伸手党的福利:Python 新手引导

只学2个月编程能写出什么代码?他们表示:You can you code!

如何用100行Python代码做出魔性声控游戏“八分音符酱”

数据分析:当赵雷唱民谣时他唱些什么?

一行代码扫出“敬业福”

我扒了杜蕾斯的微博

Python 爬虫爬取美剧网站

今天,你抢到票了吗?

爆款游戏《贪吃蛇大作战》的 Python 实现




欢迎加入

Crossin的编程教室

crossincode.com

读者交流QQ群:205177265

微信请加 crossin11 留言入群(新手/进阶)


  请把我们分享给身边爱学习的小伙伴 :)  


点击左下角“阅读原文”,查看更多学习资源

原文作者:Crossin的编程教室;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2015-06-05

  • 博文量
    498
  • 访问量
    200484