浙江 2010 · 数学 q02

题解图(原卷截图 · 含答案与官方解析)

浙江 2010 · 数学 q02 原卷截图(含答案)

文字转写(题面 + 答案)

题面

(2)某程序框图如图所示,若输出的 S=57S=57,则判断框内为

(A) k>4k>4?  (B) k>5k>5?

(C) k>6k>6?  (D) k>7k>7?

(框图内容(第 2 题):开始 → S=1S=1,k=1k=1 → k=k+1k=k+1 → S=2S+kS=2S+k → 判断框(框内写什么正是本题所问)?「否」的分支绕回 k=k+1k=k+1 继续循环,「是」的分支往下 → 输出 SS → 结束。)

答案

A

本题的知识树

4 概念 · 1 题型 · 4 套路 · 1 易错点 · 最深 3 层。长链是构建期派生的,源文件里只有最小一步。

攻略(零基础 → 会做)

循环把 S 推到 57 时计数器停在 5 · 逐圈模拟 / 四个选项各跑一遍 / 先求通项 · 最终答案:A

冷启动:先把这张框图读成一句人话

原卷把框图印在第 1 页右侧,切题时它落进了第 1 题那张图里,所以这道题的切图上看不到它。下面这张是照原卷复原的:

上半是复原的程序框图:开始 → S=1,k=1 → k=k+1 → S=2S+k → 判断框 k>4?「否」绕回 k=k+1,「是」往下 → 输出 S → 结束;右边列出四圈的 k 与 S:(2,4)、(3,11)、(4,26)、(5,57),末圈标绿。下半是四个选项各跑到底得到的输出 57、120、247、502 四根柱子,红色虚线是题面要的 S=57,只有 (A) 那根落在线上

读框图只需要按箭头走一遍:

  1. 进循环前先把两个变量放好:S=1S=1,k=1k=1。
  2. 每转一圈做两件事,顺序要紧:先把计数器加一(k←k+1k\gets k+1),再更新累加量(S←2S+kS\gets 2S+k)。也就是说,这一圈用的是加过之后的 kk。
  3. 然后问一句判断框里的话。答「否」就绕回去再转一圈;答「是」就跳出去,把当前的 SS 打印出来。

判断框写在循环体后面,所以这个循环至少转一圈(先做事,再问要不要停)。题目倒过来问:已知打印出来的是 S=57S=57,判断框里该填哪一句?

四个选项都是 k>k> 某个数的形状,而 kk 每圈只加 11、一路递增,所以「第一次满足 k>mk>m」就是「kk 刚好变成 m+1m+1 的那一圈」。于是问题变成:SS 等于 5757 的时候,kk 停在几?

解法一:逐圈模拟——把每一圈的 kk 与 SS 写成一张表

怎么想到的。 循环体只有两行、数也不大,最老实的办法就是最快的办法:拿张纸按箭头走,每转一圈记一行。别在脑子里硬算,写出来才不会串行。

进循环前:S=1S=1,k=1k=1。

圈数先 k←k+1k\gets k+1再 S←2S+kS\gets 2S+k
第 1 圈k=2k=2S=2×1+2=4S=2\times 1+2=4
第 2 圈k=3k=3S=2×4+3=11S=2\times 4+3=11
第 3 圈k=4k=4S=2×11+4=26S=2\times 11+4=26
第 4 圈k=5k=5S=2×26+5=57S=2\times 26+5=57

第 4 圈结束时 SS 正好是 5757,此刻 k=5k=5。程序要在这里跳出来,说明判断框里那句话满足:

  • 在 k=5k=5 时成立(这样才跳出去打印 5757);
  • 在 k=2,3,4k=2,3,4 时都不成立(否则会提前跳出,打印 44、1111 或 2626)。

四个选项里同时满足这两条的只有 k>4k>4——5>45>4 成立,而 2,3,42,3,4 都不大于 44。答案 A。

最容易错的一笔在这里。 S=57S=57 是第 4 圈算出来的,可这一圈里 kk 的值是 55 而不是 44。「转了 4 圈」与「计数器是 5」差一步,是因为 kk 从 11 起步、每圈加一。看到 5757 就顺手填 k>3k>3 或 k>5k>5 的,都是在这一步上读岔了:一个把圈数当成了计数器,一个把「跳出时的 kk」当成了门槛本身。门槛要比跳出时的 kk 小 11。

解法二:反着来——四个选项各代进去跑一遍

怎么想到的。 上一条是「从框图算到答案」,选择题还有一条更省心的路:答案就摆在那儿,挨个试。把每个选项填进判断框,各跑一遍程序,看谁打印出 5757。这条路不需要事先想清楚「圈数与 kk 差几」——那个最容易错的地方,被「照着框图跑」绕过去了。

先把这条链算长一点(每圈还是先 kk 加一、再 S=2S+kS=2S+k):

S: 1→4→11→26→57→120→247→502,k: 1→2→ 3 → 4 → 5 →  6 →  7 →  8.S:\ 1\to 4\to 11\to 26\to 57\to 120\to 247\to 502,\qquad k:\ 1\to 2\to\ 3\ \to\ 4\ \to\ 5\ \to\ \ 6\ \to\ \ 7\ \to\ \ 8 .

填 k>mk>m 时,程序在 k=m+1k=m+1 的那一圈跳出,打印的就是那一圈的 SS:

选项判断框跳出时 kk打印的 SS
(A)k>4k>45557\mathbf{57}
(B)k>5k>566120120
(C)k>6k>677247247
(D)k>7k>788502502

只有 (A) 打印 5757。答案 A。

顺带看出一件事:门槛往后挪一格,输出就要翻一倍还多(57→120→247→50257\to120\to247\to502),所以这四个候选的输出互不相同,答案唯一、不会有并列。图里下半那四根柱子画的就是这张表:红色虚线是题面要的 5757,四根柱子里只有第一根落在线上。

解法三:先求通项——S+k+2S+k+2 每圈翻一倍

怎么想到的。 前两条都在「跑」。如果门槛不是 44 而是 4040,跑就跑不动了,得有个公式。把循环体写成递推:第 kk 圈算出的值记作 SkS_{k}(下标就用这一圈的 kk,S1=1S_{1}=1 是进循环前的初值),则

Sk=2Sk−1+k.S_{k}=2S_{k-1}+k .

麻烦的是右边多了一个 kk,不是干净的「每圈翻倍」。补一个东西让它变干净:猜 Sk+ak+bS_{k}+ak+b 能每圈翻倍,代进去定 a,ba,b——

Sk+ak+b=2(Sk−1+a(k−1)+b)  ⟺  2Sk−1+k+ak+b=2Sk−1+2ak−2a+2b,S_{k}+ak+b=2\bigl(S_{k-1}+a(k-1)+b\bigr) \iff 2S_{k-1}+k+ak+b=2S_{k-1}+2ak-2a+2b ,

比较 kk 的系数得 1+a=2a1+a=2a,即 a=1a=1;再比较常数项得 b=−2a+2bb=-2a+2b,即 b=2b=2。于是

Tk:=Sk+k+2⟹Tk=2Tk−1.T_{k}:=S_{k}+k+2\quad\Longrightarrow\quad T_{k}=2T_{k-1} .

这就是这个循环的不变式:每转一圈,S+k+2S+k+2 恰好翻一倍,从不例外。起点 T1=1+1+2=4T_{1}=1+1+2=4,所以 Tk=4⋅2 k−1=2 k+1T_{k}=4\cdot 2^{\,k-1}=2^{\,k+1},

Sk=2 k+1−k−2.S_{k}=2^{\,k+1}-k-2 .

验一下:k=2k=2 给 8−4=48-4=4,k=5k=5 给 64−7=5764-7=57,与表里逐圈算的一致。

现在解 Sk=57S_{k}=57:

2 k+1−k−2=57  ⟺  2 k+1=k+59.2^{\,k+1}-k-2=57\iff 2^{\,k+1}=k+59 .

左边翻倍着涨、右边一次一格,两条曲线至多交两次;试 k=4k=4 得 3232 对 6363(左小),k=5k=5 得 6464 对 6464(相等),k=6k=6 得 128128 对 6565(左大),所以 k=5k=5 是唯一解。跳出时 k=5k=5,门槛就是 44,答案 A。

这条路多给了什么。 有了 Sk=2 k+1−k−2S_{k}=2^{\,k+1}-k-2,把 5757 换成任何一个数都能一口气回答,甚至能反过来问「输出第一次超过一万是第几圈」。前两条路只对这一道题的这几个数管用。

本题涉及的教材页

共 2 页