欢迎光临散文网 会员登陆 & 注册

【读书笔记】趣味数学及编程拓展(第2版) 第5章

2023-08-31 21:32 作者:圣斗士-DS-ALGO  | 我要投稿

第5章精巧求解剖析

精巧求解,是指,巧解、精解,巧和精结合求解,凝聚数学的精华,彰显出编程的卓越。

 

5.1和与积巧算

 

5.1.1互积和

【编程题】

给定n个整数,对这n个整数求任意2个数之积,任意3个数之积,......,直至所有n个整数之积。把所有这些积求和称为这些整数的互积和m。

【妙思巧解】

巧妙构造多项式化互积为多项式积。

n个整数记为a1、a2、a3、......、an

m = (1+a1)(1+a2)...(1+an) - (a1+a2+...+an) - 1

这样,用循环就一个积,就可以巧妙的求解整数的互积和。

 

5.1.2嵌套根式和

设计要点:处理根号嵌套,要逆向处理循环,从最内层根号开始,直至最外层根号。

 

5.2同码数汇趣

由同一个数码组成的数称为同码数。如5555是同码整数;0.77777是同码小数。

 

5.2.1同码数整除

【编程题】探求同码数能被p整除。

采用模拟竖式除法。

 

5.2.2同码数求和

【编程题】求同码整数和。S(d, n) = d + dd + ddd + dddd + ... + dd...d(n个d)

s用数组存储,数组每个单元存储一位数字。

从个位开始,相加和进位。

 

5.3统计的智慧

5.3.1巧妙建模

【编程题】

对于给定的正整数和s,对于3个变量x, y, z的不定方程x+y+z = s,试统计x, y, z取自区间[c,  d](0 ≤ c < d, 3c ≤ s)整数解的组数。

 

设计要点:循环,依次探求即可

 

5.3.2三角网格统计

把一个正三角形的三边分成n等份,分别与各边平行连接各分点,得n-三角网格。

【编程题】

对于指定正整数n,试求n-三角形网格中所有不同三角形(大小不同或方位不同)的个数,以及所有这些三角形的面积之和(约定网格中最小的单位三角形的面积为1)

 

设计要点:从最上层得单位三角形开始,推导计算公式。

 

5.3.3交通方格网

用典型的矩形方格网表示交通网。

【编程题】

给定一个交通方格网,其中有路障禁止通行,(路线中各段只能从左至右,从下至上),求从起始点(0,0)到终点(m,n)的最短路线的条数。

 

设计要点,用递推求得点(x, y)和前点(x-1, y)与(x, y-1)的关系

 

5.4游戏中的素数概率

5.4.1从摇骰子到抽数牌

【编程题】抽数牌之和为素数的概率。

有n张数字牌,数字牌上分别标有整数1,2,3,……,n。

输入牌的张数n(10<n<1000),分别计算抽取2张与抽取3张牌,这两种抽牌整数之和为素数的概率,并分别指出出现概率最高的素数(精确到小数点后3位)。

 

设计要点:注意循环枚举时设置正确,以免出现遗漏或重复;用试商判别法判别素数。

涉及概率计算,必须统计事件的总体数与满足指定条件事件个数,这是概率计算的基础。

 

5.4.2抽扑克牌

【编程题】扑克牌,除取大小王,有四种花色牌,每种花色有A,2,3,4,...,10,J,Q,K(约定A为数码为1,J,Q,K分别为11,12,13),即每种花色有13个数码牌。

分别计算抽取2张与抽取3张牌,这两种抽牌整数之和为素数的概率。

 

设计要点,用数组依次存储四种花色的牌,其他同5.4.1

 

5.5梅齐里亚克砝码问题

梅齐里亚克砝码问题

一位商人有一个40磅的砝码,由于跌落在地而碎成4块.后来,称得每块碎片的重量都是整磅数,而且可以用这4块来称从1至40磅之间的任意整数磅的重物.问这4块砝码碎片各重多少?

此类问题后来拓展成数学中一类“称重问题”,引起人们广泛关注。

 

5.5.1单砝码盘称重

单砝码天平,规定只能在砝码盘放砝码,而称重盘只能放物品不能放砝码。

【编程题】

一人要用整数m克材料制作n个砝码,可以用这n个砝码在单码盘天平上称1~m克的任意整数克质量。

输入整数m及指定整数质量t(m≤1000,t≤m),输出砝码至少个数n及这n个砝码的质量,并输出在天平商称重t的砝码配置方案。

 

设计要点,当n块砝码质量分别为1,2,2^2,... ,2^(n-1)时,

m = 1+2+2^2+... +2^(n-1) = 2^n - 1

可在单码盘天平上实现称1~m的任意整数质量。

 

5.5.2双砝码盘称重

双砝码盘,天平的两个盘都能放砝码。

【编程题】

一人要用整数m克材料制作n个砝码,可以用这n个砝码在双码盘天平上称1~m克的任意整数克质量。

输入整数m及指定整数质量t(1<t<m),输出砝码至少个数n及这n个砝码的质量。

 

设计要点,当n块砝码质量分别为1,3,3^2,... ,3^(n-1)时,

m = 1+3+3^2+... +3^(n-1) = (3^n - 1)/2

可在双码盘天平上实现称1~m的任意整数质量。

 

5.60-1串积与多码串积

5.6.1探求0-1串积

【编程题】

输入整数b,试寻找最小的整数a,使得a x b为0-1串积。

 

设计要点,不要枚举整数a来探求,工作量非常大,而通过枚举串积来探求,工作量相对要小得多。从小到大搜索0-1串积(要看作十进制数),从中找出最小的能被b整除的0-1串积。

 

5.6.2指定多码串积

【编程题】

输入两个数码v, u(约定0 ≤ v < u ≤ 9),对指定的正整数b,试探求最小的正整数a,使得a x b全由数字v与u组成。

 

设计要点:应用求余数判别指定n码串积。

 

5.7精妙的尾数前移

【编程题】

整数n的尾数q(可为多位)移到n的前面所得的数为n的p倍,记为n(q, p)。这里正整数p不大于前移尾数q的首位。对于指定的尾数q与倍数p,求解n(q, p)。

 

设计要点:用数组存储整数的各位数字,应用模拟竖式除法计算。

 

 

5.8伯努利装错信封问题

排列的定义:从n个不同元素中,任取m(m≤n,m与n均为自然数,下同)个不同的元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列;从n个不同元素中取出m(m≤n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,用符号A(n,m)。

 

组合的定义:从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合;从n个不同元素中取出m(m≤n)个元素的所有组合的个数,叫做从n个不同元素中取出m个元素的组合数。用符号 C(n,m) 表示。

 

5.8.1实现排列组合

【编程题】

输入正整数n,m,实现排列A(n,m)与组合C(n,m),并输出。

 

设计要点:应用回溯法设计

 

5.8.2全错位排列

某人想邀请朋友来家中聚会,写好了n封请柬,需要装入n个信封,结果因为粗心把请柬全部装错了信封。请问:装错的可能会有多少种呢?

 

设计要点,可以用枚举法,或者用递推数列法

 

5.9两个“幽灵”e和π

e和π都是无限不循环小数,试超越数,在数学上称为幽灵。

 

5.9.1自然对数的底e

【编程题】

试设计程序计算自然对数的底e,精确到小数点后指定的x位。

设计要点:选择计算自然对数的底e的公式,确定计算项数,模拟竖式除法

 

5.9.2圆周率π

【编程题】

试设计程序计算圆周率π,精确到小数点后指定的x位。

 

【读者体会】

这一章介绍了一些精巧求解例题。

编程设计要点。找到巧妙的求解公式。


【读书笔记】趣味数学及编程拓展(第2版) 第5章的评论 (共 条)

分享到微博请遵守国家法律