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

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

ID:34453604

大小:264.46 KB

页数:5页

时间:2019-03-06

浅谈数学思想在程序设计中的应用_第1页
浅谈数学思想在程序设计中的应用_第2页
浅谈数学思想在程序设计中的应用_第3页
浅谈数学思想在程序设计中的应用_第4页
浅谈数学思想在程序设计中的应用_第5页
资源描述:

《浅谈数学思想在程序设计中的应用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、浅谈数学思想在程序设计中的应用安徽省马鞍山市第二中学汤润泽随着科技的发展和时代的进步,信息技术越来越被人们所重视,也有越来越多的同学被程序设计带来的无穷魅力所吸引。首先给大家看一道题:nnn给定一正整数n,输出任意一组解x、y、z,使得x+y=z。如果不存在,则输出NoSolution。可能很多同学看到这题以后首先想到枚举算法。但是这里有3个变量,而且每个变量的范围没有上限,根本无法求解。其实,只要知道费马大定理这题就迎刃而解了。nnn费马大定理描述如下:当整数n>2时,对于所有正整数x,y,z都有x+y≠z。它的另外一种表述是:方程在n>2时没有非零

2、的整数解。所以,当n>2时,我们可以直接输出NoSolution。当n=1或2时,任意输出一解即可。Code:varn:integer;beginreadln(n);if(n=2)thenwriteln(‘345’)elseif(n=1)thenwriteln(‘123’);elsewriteln(‘NoSolution’);end.大家从上面的例子中可能已经感受到数学思想在程序设计中的重要性了。下面我们具体来谈一谈。一、直接用数学思想解决问题有些题目是以数学题本身呈现的,所以不要犹豫,直接用数学思想搞定它!定义一个由10的幂升序组成的无穷序列。这个序

3、列的开头是:110100100010000……输入K(K<231),表示序列中的位置,请你找出在这个无穷序列中K位置上的数字。经观察,1的位置分别为1,(+1)2,(+2)4,(+3)7,(+4)11,(+5)16,(+6)KK(1−)1722,(+7)29,……假设第K个1在第N位,则满足+1=N即KN=+2−。224若K为整数,那么N必定是1,反之,若K为小数,则N为0。当然,在计算K值之前,7先要判断2N−是否大于0。4Code:vari,k:longint;temp:real;beginreadln(k);if2.0*k-1.75>0thebe

4、gintemp:=0.5+sqrt(2.0*k-1.75);if(abs(trunc(temp)-temp)<1e-8)thenwriteln(1)elsewriteln(0);endelsewriteln(0);end.二、把题目转化成数学模型来解决有的题目不是以数学题本身呈现的,所以我们就要将题目转化成数学模型来解决,也就是通常所说的建模。有一个由n*n*n个1*1*1的小立方体馅饼组成的大立方体馅饼。有一个虫子从坐标x1,y1,z1出发开始吃馅饼,它只能向与它所在的小立方体相邻的小立方体馅饼前进,比如说当前虫子的坐标是1,1,1,它能到达的坐标是

5、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”。我们来用染色的方法。将每个小立方体染色(红色和蓝色),使得任意相邻的两个小立方体的颜色都相反。可以

6、发现,当n为奇数时,红立方体和蓝立方体的个数差1;当n为偶数时,红立方体与蓝立方体的个数相等。所以,当n为奇数时,如果起点立方体的颜色与终点立方体的颜色不同,则有解;当n为偶数时,如果起点立方体的颜色与终点立方体的颜色相同,则有解。我们就很轻松地把题目转化成了判断x1+y1+z1与x2+y2+z2的奇偶性是否相同的问题。三、利用数学思想优化算法有些题目大家可能会选择枚举、搜索等时间复杂度较高的算法,而恰当地加入数学思想可以优化算法,从而降低时间复杂度。有一个n+2项的数列a[0],a[1],……,a[n+1](n<=3000,-1000<=ai<=10

7、00)。已知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]=0a[1]+a[3]-2*a[2]-2*c[2]=0a[2]+a[4]-2*a[3]-2*c[3]=0……a[n-1]+a[n+1]-2*a[n]-2*c[n]=0让我们把上面的式子相加,可以得到a[0]+a[n+1]-a[

8、1]-a[n]-2*c[1]-2*c[2]-…-2*c[n]=0根据a[n-1]-a[n+1]

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。