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

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


一道比较老套的题目:


在一个宾馆里住着六个不同国籍的人,他们分别来自美国、德国、英国、法国、俄罗斯和意大利。他们的名字叫 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 上发帖提问
  • 欢迎加入讨论交流群组共同学习进步
  • 别忘了将我们的文章转发朋友圈或在知乎上为我们的专栏点赞,你们的支持将会让编程教室做得更好:)


近期文章推荐阅读:

听说你好不容易写了个爬虫,结果没抓几个就被封了?

编程新手:看懂很多示例,却依然写不好一个程序

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

几个以前发过、回复过很多次、比较有用的学习资源

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

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

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

我扒了杜蕾斯的微博

Python 爬虫爬取美剧网站

今天,你抢到票了吗?

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

相关文章
|
3月前
|
JavaScript 前端开发 Java
程序员在七夕如何用各大编程语言写浪漫情书呢?
程序员在七夕如何用各大编程语言写浪漫情书呢?
58 6
|
机器学习/深度学习 数据采集 数据挖掘
【每周一坑】矩阵旋转
给定一个 N * N 的矩阵(N >= 0),将其顺时针旋转 90°.输出处理之后的矩阵。
|
数据采集 数据挖掘 Python
【每周一坑】田忌赛马
如果你是某公子手下的谋士,已知同级别中己方的马优于田忌的马,事先不知道对方派遣顺序,不过可以根据上一轮对方的派出的马匹制定本轮的选择。为公子制定一种派遣策略,使赢得比赛的几率最大。
|
数据安全/隐私保护 图形学 Windows
推荐五款宝藏软件,身为宝藏男孩和宝藏女孩的你,不试一下吗?
今天带来五款宝藏软件,身为宝藏男孩和宝藏女孩的你们,不试一下吗?
172 0
推荐五款宝藏软件,身为宝藏男孩和宝藏女孩的你,不试一下吗?
|
前端开发 程序员 数据安全/隐私保护
【圣诞节特辑】爱心代码(程序员的浪漫plus+)-李峋
【圣诞节特辑】爱心代码(程序员的浪漫plus+)-李峋
275 0
【圣诞节特辑】爱心代码(程序员的浪漫plus+)-李峋
技术总监亲自上阵,手撸了一门编程语言,同事直呼哇塞
都说程序员的三大浪漫是:操作系统、编译原理、图形学;但图形学确实是特定的专业领域,我们几乎接触不到,所以对我来说换成网络更合适一些,最后再加上一个数据库。 这四项技术如果都能掌握的话,可以在 IT 行业横着走了,加上这几年互联网行业越来越不景气,越底层的技术就越不可能被替代;所以为了给自己的 30+ 危机留点出路,从今年上半年开始我就逐渐开始从头学习编译原理。 功夫不负有心人,经过近一个月的挑灯夜战,每晚都在老婆的催促下才休息,克服了中途好几次想放弃的冲动,终于现在完成了 GScript 一个预览版。 预览版的意思是语法结构与整体设计基本完成,后续更新也不太会改动这部分内容、但还缺少一些易用功
|
Web App开发 JavaScript 前端开发
【程序员的浪漫】七夕到了,还不快给你女朋友做一个专属chrome插件
【程序员的浪漫】七夕到了,还不快给你女朋友做一个专属chrome插件
137 0
【程序员的浪漫】七夕到了,还不快给你女朋友做一个专属chrome插件
|
Java 程序员
一个程序员的中秋节碎碎念
2022 年中秋节非常特殊,和教师节同一天。 在这个特殊的日子里,谈谈我的中秋仪式感,中秋计划怎么过,并谈谈自己的一些收获和感悟。
241 0
一个程序员的中秋节碎碎念
|
存储 数据管理 Java
六十年前的上古编程语言教程登上GitHub榜首,退休老程序员如何焕发第二春?
六十年前的上古编程语言教程登上GitHub榜首,退休老程序员如何焕发第二春?
173 0
|
人工智能 算法 容灾
喜迎女神节 高颜值支付宝程序媛的硬核人生
桃之夭夭,灼灼其华,在疫情渐退的三月,我们迎来第110个“女神节”——“三八”国际妇女节。 
581 0