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

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

看看本周的题目吧,本周的题目由读者 @疯琴 提供,我们做了小小的改进,题目为数字填充 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/

(0)

相关推荐

  • 反射,双下方法

    一. 反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序 ...

  • 32. 最长有效括号 - LeetCode

    题目链接 两遍扫描 先从左往右扫描,记录未匹配的左括号数目 若等于0,则记录当前子串长度 若小于0,则匹配失败,将下一个位置作为子串起点 若大于0,则继续匹配 从右往左再进行一次相同的扫描,就可以考虑 ...

  • 随机函数讲解python基础原理

    来源:https://www.bilibili.com/medialist/play/watchlater/BV1v4411B71M 功能:随机生成20名学生的成绩,并对比分数取出最高分. impor ...

  • 【每周一坑】生成九宫格图片

    我们的每N周一坑栏目又来了. 之前我们有过和图像处理相关的题目: [每周一坑]用代码给图片配上文字 [每周一坑]缩小图片尺寸 今天再来一个和图片有关的:图片切割. 非常简单的功能,但在开发中很常见,很 ...

  • 【每周一坑】疯狂的小母牛 +【解答】数据库

    之前我们的"每周一坑"栏目挖了一个"单词本"的系列.不过看起来大家都这种中长线项目兴趣不大啊--最近的一期,直到最近几天才有一位同学提交了解答. 所以我决定暂停 ...

  • 【每周一坑】数据库 +【解答】自动翻译

    我们的系列坑 单词本 今天继续第3期. 上次我们的目标是加入自动翻译,需要用到网络接口,可以看作是一个最简单的爬虫.详细方法稍后分析,先来谈谈今天的任务: 使用数据库存储单词数据 交互效果与之前相同, ...

  • 【每周一坑】自动翻译 | 【解答】单词本

    上次我们挖了一个系列坑:[每周一坑]单词本. 第一期的目标,是实现控制台下的单词录入及保存功能.各位都有实现吗?在本文后半段,我们会来做具体分析. 在这之前,先给出新的目标: 自动给添加的单词增加翻译 ...

  • 【每周一坑】单词本 +【解答】三国演义中谁的存在感最强

    "每周一坑"这个系列在本教室的文章中,阅读量不算高.但我屡次在和读者沟通时听到说"我都有跟着每周一坑里的题在做".这是个有意思的普遍现象:内容的价值和传播度并不 ...

  • 【每周一坑】三国演义中谁的存在感最强 +【解答】暴力计算圆周率

    自然语言处理(NLP)是人工智能的一个重要领域.在对中文做自然语言处理的时候,一个很基础的操作就是分词:因为中文不像英语有现成的单词划分,需要将汉字序列切分成一个个单独的词,以便于后续的处理和分析. ...

  • 【每周一坑】暴力计算圆周率 +【解答】生成/识别二维码

    我们之前有出过一些和概率相关的问题.比如 几道有趣的概率题.三门问题.田忌赛马.蜥蜴流感与贝叶斯定理.我讲过,用计算机程序来解编程题有个很有意思的思路,就是暴力解法.就是利用电脑的计算能力,去模拟大量 ...

  • 【每周一坑】生成/识别二维码 +【解答】新个税计算器

    二维码的本质是将文本信息转化成符合一定格式的平面图片信息,以便于计算机/手机通过摄像头或扫码设备快速而准确地识别,实现信息的传递.从某种角度来说,二维码可算是打通次元壁的途径,将互联网与现实世界更便捷 ...