上中独一无二的选题与算分方式
上周,上海中学高一的新生完成了他们进入高中后的第一次试炼,整体强度还是很大的。
这次高一九月练习的最后一道题,是从2025年北京高考最后一道题改过来的。学生刚进高中,就开始做高考压轴题,听起来有点吓人。不过,具体看题目,它用到的知识并不多:读懂集合的定义,会判断奇偶性,再加上一些计数,就可以开始研究了。
而且,这道题确实有意思。题面上写的是有序数对,画出来是一张棋盘;相邻两项的限制,规定的是棋子怎么走。顺着它往下想,就会遇到骑士巡游;进一步讨论一般图上的路线,还能谈到计算机科学里的 与 ,谈到其中一类叫作“ 完全”的问题。
高一学生用已经学过的知识,就能接触到这些问题,我觉得很好。一道压轴题,能给学生打开一个数学的世界。 北京的原题和上中的改编,都值得拿出来好好讲一讲。
先说一下这次考试的给分方式。卷面满分120分,最后按100分记成绩:80分及以下,拿多少算多少;超过80分的部分,除以2,再加回80分。
也就是说,卷面90分记85分,100分记90分,110分记95分,120分才是满分100分。这样一来,高分段学生的领先优势就没有那么大了。最后成绩差10分,卷面上可能差了20分。
卷子本身还是有挑战性的。刚进高中的学生,既要适应集合、逻辑这些新的表达,又要把方程、不等式里的分类和边界处理清楚,压力不小。最后这道18分的题,计算倒不多,但要求学生说明一件事为什么根本做不到。
我们就从这道题开始看,本题精心制作的视频放在这里可以提前食用:
上中是如何改编北京高考?
题目给出
从 中选出 个不同的有序数对,排成一个序列。如果相邻两项的两个坐标,一个相差4,另一个相差5,也就是
就把这样的序列称为 列。
三个小问分别是:
(1) 第一项是 ,写出第二项的所有可能。
(2) 如果奇数项的横坐标属于 ,偶数项的横坐标属于 ,那么 和 能否同时出现在这个序列中?说明理由。
(3) 证明: 中的全部144个元素,不可能排列成一个 列。

2025年北京高考第21题,用的就是这套定义和设问。两道题放在一起,改了哪些地方很容易看出来。

从64个元素变成144个元素,看起来题目变大了。但它会不会更难,光看数字还判断不了。先把这些有序数对画出来,再看每一步究竟发生了什么。
这里的坐标变换不就是一匹步子迈得更大的马吗?
把 看成第 列、第 行的格子。北京题里的64个有序数对,正好是一张 的棋盘;上中题里的144个有序数对,就是一张 的棋盘。
排成序列,也就变成了在棋盘上走一条路线:第一项是起点,第二项是下一步到达的格子。题目要求有序数对互不相同,就意味着走过的格子不能再走。
再看上中的相邻项条件。横、纵坐标分别相差4和5,意思就是水平方向走4格、竖直方向走5格;或者水平方向走5格、竖直方向走4格。比如从 到 ,就是向右4格,再向上5格。北京题也是一样,只是换成了3格和4格。

这样看就很像国际象棋里的马了。马走“日”字,水平方向走两格、竖直方向走一格,或者水平方向走一格、竖直方向走两格。这两道题里的“马”,只是把步子迈大了一些。
普通的马能不能不重复地走遍棋盘上的每一个格子?这就是经典的骑士巡游问题。在通常的 棋盘上,可以找到这样的路线:从一个格子出发,跳63次,恰好经过全部64个格子。

如果最后还能一步跳回起点,就叫闭合巡游。不过,这两道考题都没要求回到起点,走遍一次就行。
把普通马的1、2换成其他正整数 ,按照 或 的位移跳跃,就得到了广义骑士。北京题是3、4的跳法,上中题是4、5的跳法。第三问要求证明的,正是这样的“马”不能在相应棋盘上完成一次巡游。
现在题目就具体了。前两问先研究这匹马能到哪里、走过的格子有什么共同规律,第三问再问它能不能走遍。有了棋盘,很多在符号里不容易看见的限制,就可以直接画出来。
两题放在一起做效果更好
第一问没有太多障碍。
上中从 出发,第二项的四种可能是
北京从 出发,则只有 和 。按规则把各个方向试一下,跳出棋盘的去掉即可。
到了第二问,只看一步就不够了。
两个格子未必相邻,要判断它们能不能出现在同一条路线中,得找一个每走一步都能用的规律。
这里看坐标和的奇偶性就很方便。 不管是3和4,还是4和5,每一步都是一个坐标改变奇数,另一个坐标改变偶数,所以 的奇偶性一定改变。
如果按坐标和的奇偶,把棋盘涂成黑白两色,这句话就更直观了:马每跳一步,都会换一种颜色。因此,第1、3、5……项同色,第2、4、6……项也同色。
上中第二问里, 和 的横坐标都在题目规定的外侧区域,所以都只能排在奇数位置。可它们的坐标和,一个是2,一个是5,颜色不同,矛盾了。
北京题规定奇数项的横坐标属于 ,偶数项属于 。要判断的 和 都只能排在偶数位置,坐标和却分别是5和8,同样不可能同时出现。

第二问,两题基本是同一个做法。第三问就有区别了。
值得注意的是,第三问没有第二问里奇数项、偶数项的分区限制。 黑白交替仍然成立,但上中全盘恰好是72黑、72白,北京是32黑、32白,数量对得上。到这里,单靠黑白格还看不出矛盾。
我会让学生先想一件更简单的事:假如真的有一条完整路线,沿着这条路线,把第1、2项分成一组,第3、4项分成一组,一直分下去,会得到什么?
以上中为例,就是
每一组里的两个格子都能一步跳到,每个格子也恰好用了一次。原来要把144个格子连成一整条路线,现在先不管组与组之间能不能连起来,只要求它们两两配好。
如果连这样的配对都做不到,整条路线当然更不可能有。

上中题里,选最左边三列和最右边三列,也就是
一共72个格子。这些格子彼此不能配:同在一侧,横坐标最多相差2;分在两侧,至少相差7,都不符合相差4或5的要求。因此,它们得去别的列找伙伴。
但也不是中间的格子都能用。把列号列一下就知道了:
所有可能的伙伴,都在第5、6、7、8列,至多48个。第4、9列虽然在中间,也帮不上忙。
72个格子,每个都要配一个不同的伙伴,却只有至多48个格子可以选,怎么配都不够。所以完整路线不存在。
这里要注意,原路线中一个格子可以连着前后两个格子,但我们刚才抽出的配对,每个格子只用一次。72与48的比较,用的是后面这个要求。

北京题也可以从两侧开始看。
最左边两列、最右边两列,一共32格;它们的伙伴在中间四列,也有32格。数量一样,这样数还不够。
横坐标用过了,纵坐标能不能也用上?同时要求
选出来的就是棋盘四个角上的四块 小方块,一共16格。它们彼此也不能配,所有伙伴只能在中央的 区域里。
看起来又是16对16。不过,中央这16格里,有四格根本到不了:
原因也不复杂。从外侧的1、2、7、8出发,要相差3或4后到达3,只能是7减4;要到达6,只能是2加4。因此,要从所选区域跳到这四个位置,横、纵坐标都得改变4。
题目要求的是一个改变3、一个改变4,横纵都改变4当然不行。扣掉这四格,能当伙伴的至多只剩12格,16个格子仍然配不过来。

这就是两道题改编以后,值得比较的地方。 上中只看横坐标,就能数出72与48的差距;北京要把横、纵坐标一起用,再排除中央四个格子,才得到16与12。
所以,上中的棋盘虽然更大,沿着这个做法,最后一问反而更直接。
把它改给高一学生做,我觉得是合适的。学生需要想通“完整路线一定能拆成配对”这一步,之后每个结论都能在棋盘上检查,不需要再补多少新知识。
P vs NP,找到一条路线,和检查一条路线
前面这两道题,我们最后都用很短的理由证明了无解。换一张棋盘,却未必还能找到这样的数量矛盾。即使所有格子都能配好,也不能保证各组一定接得成一条完整路线。
这就留下了一个更一般的问题:拿到一张新的棋盘和新的跳法,怎样判断完整路线到底存不存在?
先把每个格子画成一个点,能一步跳到的两个点之间连一条线。棋盘的格子可以去掉,哪些位置能够相通,已经记录在这些点和线里了。数学上,这样的对象叫作“图”。沿着连线,经过所有点,每个点恰好一次,这样的路线叫哈密顿路径。
如果别人已经给了一条路线,检查起来倒不难:点有没有重复,有没有漏掉,相邻两点之间有没有连线,逐项核对就行。
但如果只给这张图,没有路线,就得自己去判断。一次尝试走到死路,可以换一种走法;换了很多次还没有成功,也不能仅凭这一点就说不存在。

已经有答案,让你检查;还没有答案,让你自己解决。这两件事,难度可能很不一样。 与 讨论的,就与这个区别有关。
这里说“容易”,需要有个标准。计算机科学通常看:输入的数据越来越多时,算法花的时间如何增长。比如把输入的数据长度记为 ,计算量至多是某个固定常数乘以 、,或者 的其他固定次幂,这就属于多项式时间。这里的“高效”是按这种增长方式来划分的,实际运行要多久,还得看具体的算法。
对于答案为“是”或“否”的判定问题,如果有一个算法,能对各种输入都在多项式时间内给出正确判断,这类问题就属于 。
的要求则是:当答案为“是”时,能够给出一份长度为多项式规模、也能在多项式时间内核验的证据;答案为“否”时,不能有假证据通过核验。哈密顿路径就是很直观的例子:只要确实存在,把访问各个点的顺序写出来,就是一份可以检查的证据。
注意, 里的这个 ,不表示“不能很快解决”。 是“非确定性多项式时间”的缩写。能直接很快解决的问题,当然也能很快核验,所以
真正还没有解决的是:凡是肯定答案能够这样核验的问题,是不是也都能在多项式时间内解决? 也就是
一般图上的哈密顿路径判定,属于其中的 完全问题。这类问题有一个很强的性质:所有 问题都能在多项式时间内转换成它的实例,并且保持答案一致。如果找到一个对任意输入图都有效的多项式时间判定算法,就能据此解决整个 与 问题。
说到这里,也要把范围分清楚。这里的 完全,说的是一般图上的判定问题。 上中和北京这两张固定的棋盘,我们已经用配对证明了无解;普通方形棋盘的骑士巡游,也有高效的构造方法。具体题目有可以利用的特殊条件,与一般问题的困难,并不矛盾。
另外, 保证的是肯定答案有容易核验的证据。我们这两道题恰好也找到了简短的否定证明,但不能据此认为,所有无解的情况都能这样几句话说清楚。
回到这张高一卷子
讲到 与 ,已经是课外延伸了。高一学生在考场上需要做的,还是读懂定义,发现奇偶性,再想办法证明不可能。
这张卷子的其他题,也在反复检查学生有没有把条件读准确。比如集合里装的是数,还是有序数对,还是集合?“至少一个”该怎样理解?方程没有正根,是不是就没有实根?这些地方没想清楚,后面算得再熟也容易丢分。
全卷18题,10道填空共50分,4道选择共20分,4道解答题分别为10、15、7、18分,共50分。每道题简单列一下。
所以,这张卷子也不能只盯着最后一道题。第7、9、10题已经需要花时间想,第14、16题的分类和边界也有要求。对学生来说,做完之后先看清自己丢在了哪里:是定义没读懂,是漏了情况,还是证明没有想到,这几种问题要分别处理。
真正好的课程设计
对于最后一道题,如果是我来讲评,证明完以后,还会给有兴趣的同学留一点自己研究的余地。
比如把4、5的跳法保留,棋盘改成 ,原来的证明还能不能用?这时格子总数是奇数,两两配对会剩下一个。允许剩下一个以后,原来“伙伴不够”的矛盾还在不在?
又比如把跳法改成1和3,每走一步,黑白颜色还会交换吗?只改了两个数字,原来能用的判断,也要重新检查。
这样的题,完全可以让高一学生做成一个小课题。自己画图、试走,发现规律以后试着说明理由。有编程兴趣的同学,也可以写程序搜路线,再想一想程序的结果说明了什么。搜到一条,可以拿来核验;一直没搜到,离证明不存在还差一步。
北京这道题出得好,上中把它改给高一学生做,我也赞同。 高一就可以让学生尝试做一点这样的小研究,不用等后面的知识全学完。刚学的集合、逻辑和奇偶性,已经够他们自己作出一些判断,再拿着图来讨论了。
如果学生愿意自己改一个条件,研究一次,最后把为什么成立、为什么不成立讲清楚,对后面三年的数学学习都会有帮助。题目讲完以后,还有同学想接着做下去,我觉得这就是很好的数学课。
最后完整的试卷和答案如下:











