浅谈数学思想在程序设计中的应用.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

浅谈数学思想在程序设计中的应用

随着科技的发展和时代的进步,信息技术越来越被人们所重视,也有越来越多的同学被程序设计带来的无穷魅力所吸引。

首先给大家看一道题:

给定一正整数n,输出任意一组解x、y、z,使得xn+yn=zn。如果不存在,则输出NoSolution。

可能很多同学看到这题以后首先想到枚举算法。但是这里有3个变量,而且每个变量的范围没有上限,根本无法求解。其实,只要知道费马大定理这题就迎刃而解了。

费马大定理描述如下:当整数n2时,对于所有正整数x,y,z都有xn+yn≠zn。

它的另外一种表述是:方程在n2时没有非零的整数解。所以,当n2时,我们可以直接输出NoSolution。当n=1或2时,任意输出一解即可。

Code:

var

var

n:integer;

begin

readln(n);

if(n=2)thenwriteln(‘345’)

elseif(n=1)thenwriteln(‘123’);

elsewriteln(‘NoSolution’);

end.

大家从上面的例子中可能已经感受到数学思想在程序设计中的重要性了。下面我们具体来谈一谈。

一、直接用数学思想解决问题

有些题目是以数学题本身呈现的,所以不要犹豫,直接用数学思想搞定它!

定义一个由10的幂升序组成的无穷序列。这个序列的开头是:110100100010000……输入K(K231),表示序列中的位置,请你找出在这个无穷序列中K位置上的数字。

经观察,1的位置分别为1,(+1)2,(+2)4,(+3)7,(+4)11,(+5)16,(+6)22,(+7)29,……假设第K个1在第N位,则满足即。若K为整数,那么N必定是1,反之,若K为小数,则N为0。当然,在计算K值之前,先要判断是否大于0。

Code:

var

var

i,k:longint;

temp:real;

begin

readln(k);

if2.0*k-1.750the

begin

temp:=0.5+sqrt(2.0*k-1.75);

if(abs(trunc(temp)-temp)1e-8)thenwriteln(1)

elsewriteln(0);

end

elsewriteln(0);

end.

二、把题目转化成数学模型来解决

有的题目不是以数学题本身呈现的,所以我们就要将题目转化成数学模型来解决,也就是通常所说的建模。

有一个由n*n*n个1*1*1的小立方体馅饼组成的大立方体馅饼。有一个虫子从坐标x1,y1,z1出发开始吃馅饼,它只能向与它所在的小立方体相邻的小立方体馅饼前进,比如说当前虫子的坐标是1,1,1,它能到达的坐标是1,1,2和1,2,1和2,1,1。当虫子还没有吃完所有的馅饼时,它都会继续前进。但是它不能到达它所经过了的小立方体。当虫子吃完所有的馅饼时,它会在一个结束的位置x2,y2,z2。现在给定立方体大小n的和起始位置x1,y1,z1还有结束位置x2,y2,z2的值,问是否虫子有可能从起始位置开始吃馅饼,当它吃完所有的馅饼之后到达结束位置?输入n表示立方体的大小,x1,y1,z1表示起始位置,x2,y2,z2表示结束位置。如果可以输出“Yes”否则输出“No”。

我们来用染色的方法。将每个小立方体染色(红色和蓝色),使得任意相邻的两个小立方体的颜色都相反。可以发现,当n为奇数时,红立方体和蓝立方体的个数差1;当n为偶数时,红立方体与蓝立方体的个数相等。所以,当n为奇数时,如果起点立方体的颜色与终点立方体的颜色不同,则有解;当n为偶数时,如果起点立方体的颜色与终点立方体的颜色相同,则有解。我们就很轻松地把题目转化成了判断x1+y1+z1与x2+y2+z2的奇偶性是否相同的问题。

三、利用数学思想优化算法

有些题目大家可能会选择枚举、搜索等时间复杂度较高的算法,而恰当地加入数学思想可以优化算法,从而降低时间复杂度。

有一个n+2项的数列a[0],a[1],……,a[n+1](n=3000,-1000=ai=1000)。已知a[i]=(a[i-1]+a[i+1])/2-c[i](i=1,2,……,n)。已知a[0],a[n+1],c[1],……,c[n]。计算a[1]。

这道题同学们可能会选择使用递归算法,但我们可以看到n最大为3000,显然时间复杂度太高。其实,我们可以用数学方法来解决这道题。

a[0]+a[2]-2*a[1]-2*c[1]=0

a[1]+a[3]-2*a[2]-2*c[2]=0

a[2]+a[4]-2*a[3]-2*c[3]=0

……

a[n-1]+a[n+1]-2*a[n]-2*c[n]=0

让我们把上面的式子相加,可以得

文档评论(0)

雨中人 + 关注
实名认证
文档贡献者

这一世渡尽红尘,若有来生,不再为人。

1亿VIP精品文档

相关文档