流程图试题分析
将自然数依次排列成如下所示的数码序列:
1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 …
流程图1和流程图2都能输出从头数起的第 Ⅰ个数码。
填充流程图1和流程图2中的①_⑧,使之成为完整的流程图。
比较流程图1和流程图2的优缺点。
问题1
①.N+1→N
②.L-I+1→J
③.
④.L→LS
⑤.(I-LS-N1*M)
⑥.*10
问题2
流程图1算法简单,但运算量大。
流程图2算法复杂,但运算量小。
流程图1采用逐个往数码序列中增添自然数的方法。每增添一个自然数N,都重新计算数码序列中已有数码的个数L,并考察是否已达到了I个数码。若未达到,则往数码序列中增添下一个自然数,因此①处应填入N+1→N;若已达到I个数码,则准备输出,这时需计算出数码序列中的每I个数码是自然数N的从右边数第几位,并把该位从N中分离出来。②处计算该位数J,应填入L-I+1→J。在③处填入。即可将自然数N的从右边数第J位分离出来,具体分析如下:N/10↑J的结果是将N的小数点左移J位,即使N的从右边数第J位成为小数点后第1位。N/10↑J-的结点是将该数的整数部分去掉,只剩小数部分,再乘10,取整,就将小数点后第1位分离出来了。
流程图2采用一次往数码序列中增添位数相同的所有自然数的方法。每增添这样的一组自然数,都用数码序列中数码个数的原值LS加上本组新加进去的数据个数,重新计算出数码序列中已有的数码个数L,并考察是否已达到了I个数码。若未达到,则将自然数的位数M加1,并在④处执行L→LS,即用数据序列中数码个数的新值替掉原值,然后再将位数为M的所有自然数加进数码序列中;若已达到I个数码,则准备输出,这时需计算出数码序列中的第I个数码前面已放了多少个M位的自然数,流程图中算出了该值并放到N1中。流程图中进一步计算出了自然数N,数码序列中第I个数码正是N中的某一个数码。下面需进一步计算出此数码是N的从右边数的第几位,并把该位从N中分离出来。⑤处填入(I-LS-N1*M),这个式子算出的是数码序列中的第I个数码是自然数N的从左边数第几位,而用M-⑤+1算出的J值就是数码序列中的第I个数码是自然数N的从右边数第几位。流程图2的最后一步从N中分离出该数码的方法与流程图1不同,需在⑥处填入*10才能得到正确结果。