宁波市近三小学组决赛试题解读.pptVIP

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

宁波市近三年小学组决赛 试题解读(部分) 胡苗坤 * 22届 试题一:最小数(100分) (源程序名:min.pas或min.c或min.cpp,编译后可执行程序名:min.exe) 【问题描述】   给定一个正整数n,请去掉其中的m个数字,使其剩下的数字按原先从左到右的相对次序组成一个新数,但该新数的值必须尽可能的小。 【输入】 输入文件min.in中只有一行,共2个整数,分别是n和m的值,中间用一个空格分隔。 【输出】 输出文件min.out中只有一行,该行只有一个整数,它是从n中去掉m个数字后所能得到的最小新数(注:如果新数的最高位是零,输出时请去掉这些零)。 【样例1】【输入】456547 1【输出】45547 【样例2】【输入】456547 3【输出】447 【样例3】【输入】1003 1 【输出】3 【数据限制】 本题共有10组测试数据,每组10分,共100分。 50%的数据, 10≤n≤2.1*109,另外50%的数据n不超过240位; 所有的数据m的值都小于n的位数。 由于正整数n的有效数位为240位,所以很自然地采用字符串类型存贮n。 那么如何决定哪s位被删除呢?是不是删除最大的那s个数字呢? [算法分析] 显然不是,大家很容易举出一些反例。 为了尽可能逼近目标,我们选取的贪心策略为:每一步总是选择一个使剩下的数最小的数字删去,即按高位到低位的顺序搜索,若各位数字递增,则删除最后一个数字;否则删除第一个递减区间的首字符,这样删一位便形成了一个新数字串。然后回到串首,按上述规则再删下一个数字。重复以上过程s次为止,剩下的数字串便是问题的解了。 [算法分析] 例如:n=178543 s=4 删数的过程如下: n=178543 {删掉8} 17543 {删掉7} 1543 {删掉5} 143 {删掉4} 13 {解为13} 这样,删数问题就与如何寻找递减区间首字符这样一个简单的问题对应起来。这也是问题的本质。 [算法实现] 要注意一个细节性的问题,就是可能会出现字符串串首有若干0的情况,甚至整个字符串都是0的情况。 按以上贪心策略编制的程序框架如下: begin 输入n,s; while s>0 do begin i:=1; {从串首开始找} while (i<length(n)) and (n[i]<=n[i+1]) do i:=i+1; delete (n,i,1); {删除字符串n的第i个字符} s:=s-1; end; while (length(n)>1)and (n[1]=‘0’) do delete(n,1,1); {删去串首可能产生的无用零} 输出n; end. 试题二:等式(100分) (源程序名:equal.pas或equal.c或equal.cpp,编译后可执行程序名:equal.exe) 【问题描述】 有一个未完成的等式:1 2 3 4 5 6 7 8 9=N 当给出整数N的具体值后,请你在2,3,4,5,6,7,8,9这8个数字的每一个前面,或插入一个运算符号“+”号,或插入一个运算符号“-”号,或不插入任何运算符号,使等式成立,并统计出能使等式成立的算式总数,若无解,则输出0。 例如:取N为108时,共能写出15个不同的等式,以下就是其中的二个算式: 1+23+4+56+7+8+9=108 123-45+6+7+8+9=108 【输入】输入文件equal.in中只有1个数,即整数N的值。 【输出】输出文件equal.out只有一行,该行只有1个数,表示能使等式成立的算式总数。【样例】【输入】 108【输出】 15 【数据限制】 本题共有10组测试数据,每组10分,共100分,对于所有的n,-30000≤n≤1000000 [算法分析] 本题很起来很复杂,但只要仔细分析一下题目要求,其实就是在 ‘1 2 3 4 5 6 7 8 9’这个字符串中穷举插入’+’,’-’,’ ’三个操作符,如新字符串‘1+23+4+56+7+8+9’,然后把生成后的新字符串进行求值,判断是否与N相等,相等的话就累加一。 所以此题的关键成了如何计算新字符串的值。 var s:string; n,result:integer; i1,i2,

文档评论(0)

000 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档