前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【每周一坑】谁是哪国人?

【每周一坑】谁是哪国人?

作者头像
Crossin先生
发布2018-04-17 11:05:19
5720
发布2018-04-17 11:05:19
举报

一道比较老套的题目:

在一个宾馆里住着六个不同国籍的人,他们分别来自美国、德国、英国、法国、俄罗斯和意大利。他们的名字叫 A、B、C、D、E、F。名字的顺序与上面的国籍不一定相互对应。

  1. A 和美国人是医生
  2. E 和俄罗斯人是教师
  3. C 和德国人是技师
  4. B 和 F 曾经当过兵,而德国人从未参过军
  5. 法国人比 A 年龄大,意大利人比 C 年龄大
  6. B 同美国人下周要去西安旅行,而 C 同法国人下周要去杭州度假

通过上述描述,判断 A、B、C、D、E、F 各是哪国人?

这种类型的题目有很多,时不时地会在智力测验、招聘笔试、公务员行测里出现。常见形式还有谁说了假话、谁是什么职业、谁站在谁左/右边……如果用编程来解决的话,其实都是一样的套路。

期待各位同学提交解答。

提交代码可以使用 paste.ubuntu.com 或 codeshare.io 等代码分享网站,只需将代码复制上去保存,即可获得一个分享地址,非常方便。

【解答】矩阵旋转

该题目存在一行代码的简单解法,将矩阵逆序处理之后再转置即可。如下所示:

def rotate(matrix):
    '''
    : type matrix : List(List(Int))
    : rtype: List(List(Int))
    '''
    return zip(*matrix[::-1])

原理如下:

1 2 3

4 5 6

7 8 9

7 8 9

4 5 6

1 2 3

7 4 1

8 5 2

9 6 3

另外一种方法理解起来稍微容易,但代码看起来就相对复杂了。思路是直接对 4 条边上的 4 个位置进行交换。如题目中所给的矩阵所示,四个角的数字分别为 [1,3,9,7] 交换后为 [7,1,3,9]。如此循环,逐层处理,最后得到结果:

def rotate(matrix):
    length = len(matrix)
    for i in range(int(length/2)):
        count = 0
        for j in range(i,length-1-i):
            # [1,3,9,7] --> [7,1,3,9]
            matrix[i][j], matrix[i+count][length-i-1], matrix[length-i-1][length-j-1], matrix[length-j-1][i] = matrix[length-j-1][i], matrix[i][j], matrix[i+count][length-i-1], matrix[length-i-1][length-j-1]
            count += 1
    return matrix

m1 = [[]]
m2 = [[1]]
m3 = [[i for i in range(3)] for j in range(3)]
m4 = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
assert rotate(m1) == [[]]
assert rotate(m2) == [[1]]
assert rotate(m3) == [[0, 0, 0], [1, 1, 1], [2, 2, 2]]
assert rotate(m4) == [[13, 9, 5, 1], [14, 10, 6, 2], [15, 11, 7, 3], [16, 12, 8, 4]]

除了以上两种方法,其他同学也提出了不同的解决方案:

@cheng_y 同学的答案采用了两两换位的方式: https://paste.ubuntu.com/25345391/

@王凌鸿 同学也是相似的思路: https://paste.ubuntu.com/25339267/

@jzy丶 同学使用了 numpy 来解决: https://github.com/Noir-desir/every-weekend/blob/master/matrix.py

@strawhat、@聂宇威 等同学也提交了成功的解法。

  • 点击左下角“阅读原文”,可查看Python教程及更多学习资源
  • 代码问题请在论坛 bbs.crossincode.com 上发帖提问
  • 欢迎加入讨论交流群组共同学习进步
  • 别忘了将我们的文章转发朋友圈或在知乎上为我们的专栏点赞,你们的支持将会让编程教室做得更好:)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-09-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Crossin的编程教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档