第六章模拟--公开课件.pptVIP

  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只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王。编程求输入n,m后,输出最后猴王的编号。 输入:每行是用空格分开的两个整数n和m,最后一行是 0 0 输出:猴王的编号 约瑟夫问题(猴子选大王) 人工解决的办法就是将n个数写在纸上排成一圈,然后从1开 始数,每数到第m个就划掉一个数,一遍遍做下去,直到剩下最后一个。 用数组anLoop存放n个数,相当于n个数排成的圈;用整型变量nPtr指向当前数到的元素,相当于人的手指;划掉一个数的操作,用将数组元素置0的方法来实现。人工数的时候,要跳过已经被划掉的数,程序中就要跳过为0的数组元素。需要注意的是,当nPtr指向anLoop中最后一个元素(下标n-1)时,再数下一个,则nPtr要指回到数组的头一个元素(下标0),这样anLoop才象一个圈。 约瑟夫问题(猴子选大王) #include stdio.h #include stdlib.h #define MAX_NUM 300 int aLoop[MAX_NUM + 10]; main() { int n, m, i; while (1) { scanf( %d%d, n, m); if ( n == 0) break; for( i = 0; i n; i ++ ) aLoop[i] = i+1; int nPtr = 0; 约瑟夫问题(猴子选大王) for( i = 0; i n; i ++ ) { int nCounted = 0; while( nCounted m ) { while (aLoop[nPtr]==0) nPtr= (nPtr +1)%n; nCounted ++; nPtr = ( nPtr + 1 ) % n; } nPtr --; if( nPtr 0 ) nPtr = n - 1; if( i == n-1 ) printf(%d\n, aLoop[nPtr]); aLoop[nPtr] = 0; } } } 花生问题 假定宠物猴多多在每个单位时间内,可以做下列四件事情中的一件: 1) 从路边跳到最靠近路边(即第一行)的某棵花生植株; 2) 从一棵植株跳到前后左右与之相邻的另一棵植株; 3) 采摘一棵植株下的花生; 4) 从最靠近路边(即第一行)的某棵花生植株跳回路边。 现在给定一块花生田的大小和花生分布,请问在限定时间内,多多最多可以采到多少个花生? 注意:可能只有部分植株下面长有花生,假设这些植株下的花生个数各不相同。 花生问题 输入:第一行一个整数,表示测试数据的组数,第二行包括三个整数:M、N和K;表示花生田的大小为M*N,采花生的限定时间为K(0= K=1000)个单位时间,接下来的M行,每行包括N个非负整数,也用空格隔开;第i+1行的第j个整数Pij(0 = Pij = 500)表示花生田里植株(i,j)下花生的数目,0表示该植株下没有花生。 输出包括一行,这一行只包含一个整数,即在限定时间内,多多最多可以采到花生的个数 花生问题 解题思路 试图找规律,得到一个以花生矩阵作为自变量的公式来解决这个问题,是不现实的。 只能是模拟采摘过程,即走进花生地。每次要采下一株花生(剩下最多的花生)之前,先判断剩下的时间,够不够走到那株花生→采摘→ 并返回到路上。如果时间够,则走过去采摘;如果时间不够,则采摘活动到此结束。 花生问题 #include stdio.h #include stdlib.h #include memory.h #include math.h int T, M, N, K; #define MAX_NUM 55 int aField[MAX_NUM][MAX_NUM]; main() {scanf(%d, T); for( int t = 0; t T; t ++ ) { scanf(%d%d%d, M, N , K); for( int m = 1; m = M;

文档评论(0)

老刘忙 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档