6. 模拟与高度计算.ppt

  1. 1、本文档共57页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
现实中的有些问题难以找到公式或规律来解决。只能按照一定步骤不停地做下去,最后才能得到答案。这样的问题,用计算机来解决十分合适,只要能让计算机模拟人在解决问题时的行为即可。这一类的问题可以称之为“模拟题”。 摘花生 /practice/2950 问题描述 鲁宾逊先生有一只宠物猴,名叫多多。这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!——熊字”。 鲁宾逊先生和多多都很开心,因为花生正是他们的最爱。在告示牌背后,路边真的有一块花生田,花生植株整齐地排列成矩形网格(如图1)。 例如在图2所示的花生田里,只有位于(2, 5), (3, 7), (4, 2), (5, 4)的植株下长有花生,个数分别为13, 7, 15, 9。沿着图示的路线,多多在21个单位时间内,最多可以采到37个花生。 输入格式 输入的第一行包括一个整数T,表示数据组数。 每组输入的第一行包括三个整数,M, N和K,用空格隔开;表示花生田的大小为M * N(1 = M, N = 50),多多采花生的限定时间为K(0 = K = 1000)个单位时间。接下来的M行,每行包括N个非负整数,也用空格隔开;第i + 1行的第j个整数Pij(0 = Pij = 500)表示花生田里植株(i, j)下花生的数目,0表示该植株下没有花生。 输出要求 输出包括T行,每一行只包含一个整数,即在限定时间内,多多最多可以采到花生的个数。 样例输入 1 6 7 21 0 0 0 0 0 0 0 0 0 0 0 13 0 0 0 0 0 0 0 0 7 0 15 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 样例输出 37 解题思路 参考程序 显示器 3、解题思路 解题思路 解题思路 4、参考程序 4、参考程序 4、参考程序 4、参考程序 5、实现技巧 模拟类课外练习 CDOJ:1040猴子选大王、1078约瑟夫斯问题、1073 UESTC冠军杯 什么是高精度计算? C/C++中的int 类型能表示的范围是-231 -- 231–1。unsigned 类型能表示的范围是 0 -- 232–1,即 0 -- 4294967295。所以,int 和unsigned 类型变量,都不能保存超过10 位的整数。(另外,long long类型也不能保存超过20位的整数,因为264 = 18,446,744,073,709,551,616) 有时需要参与运算的数值,可能会远远不止10、20位,例如,可能需要保留小数点后面100位(比如求π的值),那么,即便使用能表示的很大数值范围的double变量,但是由于double变量只有64 位,所以还是不可能达到精确到小数点后面100位这样的精度。long long变量的精度也不足以表示一个100 位的整数。一般我们称这种基本数据类型无法表示的整数为大整数。如何表示和存放大整数呢?基本的思想就是:用数组存放和表示大整数。一个数组元素,存放大整数中的一位。 那么,如何解决类似大整数这样的高精度计算问题呢? 斐波那契数列的准确计算 斐波那契数列的准确计算 斐波那契数列的准确计算 斐波那契数列的准确计算 斐波那契数列的准确计算 大整数乘法 /problem.php?pid=1092 解题思路 4、参考程序 4、参考程序 4、参考程序 大整数除法 3、解题思路 4、参考程序 4、参考程序 4、参考程序 参考程序 麦森数 3、解题思路 解题思路 解题思路 4、参考程序 4、参考程序 参考程序 高精度计算课外练习 Description Sample Input 1 12345678900 98765432100 Sample Output 1219326311126352690000 在程序中,为了更好的保存大整数,用了一个结构体: typedef struct { int number[LEN]; int len; } digit; 用结构体a,b表示两个乘数,用c表示积。计算的过程基本上和小学生列竖式做乘法相同。为编程方便,个数存储在数组最低位,而不是下标高的位置。在程序中,可以不急于处理进位,而将进位问题留待最后统一处理。 现以 835×49 为例来说明程序的计算过程。 先算835×9。5×9 得到45 个1,3×9 得到27 个10,8×9 得到72 个100。由于不急于处理进位,所以835×9 算完后,结果如下: 接下来算4×5。此处4×5 的结果代表20

您可能关注的文档

文档评论(0)

mei1809816wei + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档