浙江 2014 · 数学 q11

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

浙江 2014 · 数学 q11 原卷截图(含答案)

文字转写(题面 + 答案)

题面

  1. 若某程序框图如图所示, 当输入 50 时, 则该程序运算后输出的结果是 ____.

(框图内容:开始 → 输入 nn → S=0S=0,i=1i=1 → S=2S+iS=2S+i → i=i+1i=i+1 → 判断 S≥nS\ge n?否则返回上一步的 S=2S+iS=2S+i 继续循环,是则往下 → 输出 ii → 结束。)

答案

6

本题的知识树

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

攻略(零基础 → 会做)

循环就是递推 · 五轮手推与一条通项,答的是计数器不是轮数 · 最终答案:6

冷启动:先把框图翻译成三行字

框图看着吓人,能用的信息只有三行:

  • 初值:S=0S=0,i=1i=1;
  • 循环体:S=2S+iS=2S+i,然后 i=i+1i=i+1;
  • 退出条件:判断 S≥nS\ge n,成立就输出 ii,不成立就绕回循环体。

本题 n=50n=50。翻译完就可以把图合上了——剩下的全是数列的事。

两个细节要在这一步钉死,后面三条路都靠它:

  1. 判断框在循环体后面。所以是「先做后判」,循环体至少跑一次;每一轮的顺序永远是「先更新 SS,再更新 ii,最后才判断」。
  2. 循环体里 SS 用的是本轮的 ii,而 ii 在判断之前就已经加过了。于是退出时看到的 ii,属于「下一轮准备用的那个」,比跑过的轮数多 11。

把第 kk 轮结束时的 SS 记作 SkS_k,第 kk 轮用的正是 i=ki=k,于是循环体就是一条递推:

S0=0,Sk=2Sk−1+k(k≥1),S_0=0,\qquad S_k=2S_{k-1}+k\quad(k\ge 1),

而输出值 =k∗+1=k^{*}+1,其中 k∗k^{*} 是使 Sk≥50S_k\ge 50 成立的最小下标。

解法一:照着框图跑五轮,把 S 和 i 摞成一张表

轮数少,直接跑。每一轮做三件事:算 SS、加 ii、判 S≥50S\ge 50。

轮数 kk本轮用的 iiS=2S+iS=2S+i轮末的 iiS≥50S\ge 50?
112⋅0+1=12\cdot 0+1=12否
222⋅1+2=42\cdot 1+2=43否
332⋅4+3=112\cdot 4+3=114否
442⋅11+4=262\cdot 11+4=265否
552⋅26+5=572\cdot 26+5=576是

第五轮末 S=57≥50S=57\ge 50,判断框走「是」,输出此刻的 ii:

6\boxed{6}

表里那一栏「轮末的 ii」是这道题的全部风险所在。循环体只跑了五轮,答案却是 66;漏掉这一栏、直接数行数的人会写 55。

上下两块教学图。①上块左边把原卷丢失的那张程序框图复原画出:自上而下八个框,「开始」(切角矩形)、「输入 n」(平行四边形,右侧灰字注「本题 n=50」)、「S=0,i=1」(矩形)、「S=2S+i」(蓝色矩形)、「i=i+1」(蓝色矩形)、「S\ge n ?」(红色菱形)、「输出 i」(绿色平行四边形)、「结束」(切角矩形),相邻两框之间用灰色向下箭头连接;菱形右顶点引出一条红线向右、再向上,折回到 S=2S+i 框的右边,旁边红字「否」;菱形正下方那段箭头旁绿字「是」。①上块右边是一张折线图:横轴标「k(轮数)」、刻度 1 到 5,蓝色折线自原点起依次经过五个圆点,前四个点旁灰字依次标 1、4、11、26;一条红色水平虚线标「S=50(门槛)」;折线在第五个点冲到虚线上方,旁边绿字两行「S_{5}=57\ge 50:第 5 轮首次越线」「此刻计数器 i 已加成 6」。整块标题是「左:切题时丢掉的那张框图(复原) 右:S_k 什么时候首次越过门槛 n=50」。②下块是文字:抬头「② 框图翻译成三行:S=0,\ i=1;S=2S+i,i=i+1;判断 S\ge n(做完再判)」;抬头「路一 照着框图跑五轮:第 k 轮用的正是 i=k,记轮末的 S 为 S_k」,下面是五行两列的表,左列依次「第 1 轮:S=2\times 0+1=1」「第 2 轮:S=2\times 1+2=4」「第 3 轮:S=2\times 4+3=11」「第 4 轮:S=2\times 11+4=26」「第 5 轮:S=2\times 26+5=57」,右列依次「轮末 i=2 S\ge 50?否 → 回到 S=2S+i」「轮末 i=3 S\ge 50?否 → 回到 S=2S+i」「轮末 i=4 S\ge 50?否 → 回到 S=2S+i」「轮末 i=5 S\ge 50?否 → 回到 S=2S+i」「轮末 i=6 S\ge 50?是 → 退出」,前四行蓝字、第五行绿字;抬头「路二 把循环体当递推 S_k=2S_{k-1}+k,配两个常数凑成等比」,蓝字两行「S_k+k+2=2(S_{k-1}+(k-1)+2),首项 2、公比 2 \Rightarrow S_k=2^{k+1}-k-2:1,4,11,26,57」「2^{k+1}\ge k+52:k=4 时 32<56,k=5 时 64\ge 57 \Rightarrow k^{*}=5」;抬头「路三 只看增量:增量自己也是「乘 2 加 1」」,蓝字一行「d_{k+1}=2d_k+1,d_1=1 \Rightarrow d_k=2^{k}-1(1,3,7,15,31),累加得 S_k=(2^{k+1}-2)-k,同一条通项」;末行绿字「跑了 5 轮,输出的却是计数器 i:答案 6(输出 6 对应 27\le n\le 57,50 离两端都远)」

解法二:把循环体当递推,配两个常数凑成等比

Sk=2Sk−1+kS_k=2S_{k-1}+k 是一条非齐次线性递推:齐次部分是「乘 22」,多出来的 kk 是一次的。标准动作是给它配一个一次式,让新数列变成等比。

设 bk=Sk+λk+μb_k=S_k+\lambda k+\mu,要它满足 bk=2bk−1b_k=2b_{k-1},即

Sk+λk+μ=2(Sk−1+λ(k−1)+μ) ⟹ Sk=2Sk−1+λk+(μ−2λ).S_k+\lambda k+\mu=2\bigl(S_{k-1}+\lambda(k-1)+\mu\bigr) \ \Longrightarrow\ S_k=2S_{k-1}+\lambda k+(\mu-2\lambda).

与 Sk=2Sk−1+kS_k=2S_{k-1}+k 逐项比对,得 λ=1\lambda=1、μ−2λ=0\mu-2\lambda=0,即 μ=2\mu=2。于是

bk=Sk+k+2,bk=2bk−1,b0=S0+0+2=2,b_k=S_k+k+2,\qquad b_k=2b_{k-1},\qquad b_0=S_0+0+2=2,

{bk}\{b_k\} 是首项 22、公比 22 的等比数列,bk=2k+1b_k=2^{k+1},回代得通项

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

核对一下:S1=4−3=1S_1=4-3=1,S2=8−4=4S_2=8-4=4,S3=16−5=11S_3=16-5=11,S4=32−6=26S_4=32-6=26,S5=64−7=57S_5=64-7=57,与表格逐格吻合。

再解退出条件 2 k+1−k−2≥502^{\,k+1}-k-2\ge 50,即 2 k+1≥k+522^{\,k+1}\ge k+52。左边翻倍、右边只加一,最多试两个数:

k=4: 32<56;k=5: 64≥57.k=4:\ 32<56;\qquad k=5:\ 64\ge 57 .

最小的 k∗=5k^{*}=5。

最后一步不能省:要把下标 kk 换回框图里的 ii。第 kk 轮的循环体先做 S=2S+iS=2S+i(这一刻 i=ki=k), 再做 i=i+1i=i+1(ii 变成 k+1k+1),最后才判断 S≥nS\ge n;条件成立时输出的就是此刻的 ii。 所以退出那一轮的输出值是

i=k∗+1=5+1=6.i=k^{*}+1=5+1=6 .

k∗k^{*} 是轮数、ii 是计数器,两者差 11;停在 k∗=5k^{*}=5 就答错了。

通项的好处不在这一问,而在换个输入立刻能答:nn 变成 500500、50005000,手推要跑八九轮,通项只要再试一次 2k+12^{k+1}。

解法三:只看增量,增量自己也是「乘 2 加 1」

不解通项也行——盯住每一轮涨了多少。记 dk=Sk−Sk−1d_k=S_k-S_{k-1},两条相邻的递推相减:

Sk+1−Sk=(2Sk+k+1)−(2Sk−1+k)=2(Sk−Sk−1)+1,S_{k+1}-S_k=\bigl(2S_k+k+1\bigr)-\bigl(2S_{k-1}+k\bigr)=2\bigl(S_k-S_{k-1}\bigr)+1,

也就是 dk+1=2dk+1d_{k+1}=2d_k+1。这是最简单的一类:两边同加 11 就成等比,

dk+1+1=2(dk+1),d1+1=S1−S0+1=2 ⟹ dk+1=2k,  dk=2k−1.d_{k+1}+1=2(d_k+1),\qquad d_1+1=S_1-S_0+1=2 \ \Longrightarrow\ d_k+1=2^{k},\ \ d_k=2^{k}-1 .

增量依次是 1,3,7,15,31,…1,3,7,15,31,\dots——把表格里 SS 那一列的相邻差算一遍,正是这串数。再累加法回去,用等比数列前n项和公式收口:

Sk=∑j=1k(2j−1)=(2 k+1−2)−k.S_k=\sum_{j=1}^{k}\bigl(2^{j}-1\bigr)=\bigl(2^{\,k+1}-2\bigr)-k .

与解法二同一条通项。S4=26<50≤57=S5S_4=26<50\le 57=S_5,输出 66。

这条路的价值是它不需要「配 λk+μ\lambda k+\mu」这个技巧:作一次差就把带 kk 的非齐次项消成了常数 11,剩下的是最基础的「乘 22 加常数」。

输出 6 的输入区间有多宽

把 nn 放开看会更清楚这道题在问什么。输出 k+1k+1 当且仅当 Sk−1<n≤SkS_{k-1}<n\le S_k,于是

输出34567
输入 nn 的范围2≤n≤42\le n\le 45≤n≤115\le n\le 1112≤n≤2612\le n\le 2627≤n≤5727\le n\le 5758≤n≤12058\le n\le 120

5050 稳稳落在 [27,57][27,57] 里,离两端都远。出题人挑的是一个「不卡边界」的输入:真正卡在 n=57n=57 上时,S≥nS\ge n 与 S>nS>n 两种读法就会给出 66 和 77 两个答案。原卷解析收口写的是「S=57>50S=57>50」,用的是严格不等号,而框图上印的是 S≥nS\ge n——本题两者同真,所以没出事,但这正是这类题最爱埋的雷。

三条路怎么选

什么时候用代价
解法一 跑表输入是具体的数、且轮数看着不多(≤6\le 6 轮)零技巧,但必须把「轮末的计数器」单列一栏
解法二 配常数求通项输入是字母,或要一次回答一族输入要会配 λk+μ\lambda k+\mu;对本题是杀鸡用牛刀
解法三 作差降阶递推里带 kk、但只想用最基础的工具多一步作差,换掉一个技巧

考场上就走解法一:2k+12^{k+1} 涨得飞快,五轮之内必然收口。解法二、解法三是把这道题从「算术题」升级成「数列题」的读法,也是它真正的知识落点。

一句话带走

循环体是递推,判断框是退出条件,输出的是计数器而不是轮数——Sk=2k+1−k−2S_k=2^{k+1}-k-2 在 k=5k=5 首次越过 5050,此时 ii 已经加成了 66。

本题涉及的教材页

共 6 页