宁波30届小学生程序复赛解题报告.docxVIP

  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文档。上传文档
查看更多
宁波30届小学生程序复赛解题报告

幸运数字 (lucky.cpp/pas/c) 【题目描述】 小李非常喜欢数字4和7,看到一个数字他就想快速计算出因子里面分别有几个4和7,但是智商捉急的他总是要算很久,喜欢编程的你能够帮助他吗? 【输入】 第一行一个整数n,表示给定的数字。 【输出】 两个用空格隔开的数字,分别表示给定数字的因子中4和7的个数。 【样例输入】 112 【样例输出】 2 1 【样例说明】 112=4*4*7 【数据规模】 50%的数据,3=n=230 100%的数据,3=n=260 分析:这里是分解质因数的变形,先考虑数据规模,有多大?integer是2个字节,也就是16个二进制位,除去符号位,即-1,同理,longint是4个字节,-1,int64是8个字节,-1。明显必须采用int64。 然后考虑分解质因数的时间复杂度,包含了最多的4,也就30次就能分解了,所以不会超时,至于7的个数,肯定是小于4的,放心用分解质因数。这题难度可以升级,如果在指定范围内输出每个数字因子里有几个4和7,就要考虑时间复杂度! 代码: var x,i:integer; a:array[4..7] of integer; n:int64; begin readln(n); x:=4; repeat if n mod x = 0 then begin inc(a[x]); n := n div x; end else inc(x); until x 7; writeln(a[4], ,a[7]); end. 英雄卡 (card.cpp/pas/c) 【题目描述】 小李非常迷恋收集各种干脆面里面的英雄卡,为此他曾经连续一个月都只吃干脆面这一种零食,但是有些稀有英雄卡真的是太难收集到了。后来某商场搞了一次英雄卡兑换活动,只要你有三张编号连续的英雄卡,你就可以换任意编号的英雄卡。小李想知道他最多可以换到几张英雄卡(新换来的英雄卡不可以再次兑换)。 【输入】 第一行,共一个整数n,表示小李拥有的英雄卡数。 第二行,共n个空格隔开的数字ai,表示英雄卡的编号。 【输出】 输出仅有一行,共1个整数,表示小李最多可以换到的英雄卡。 【样例输入】 6 3 1 2 4 4 5 【样例输出】 1 【样例说明】 1 2 3三张编号连续,可以换一张,换完后剩下4 4 5,不符合兑换规则,无法继续兑换。 【数据规模】 70%数据,1=n=1000 100%数据,1=n=10000,1=ai=100000 分析: 这题明显就是排序+模拟,因为数据最大到10W,且没有负数,直接用计数排序。然后按顺序模拟兑换即可。 var i,n,sum,x:longint; a:array[1..100000] of integer; begin readln(n); for i:=1 to n do begin read(x); inc(a[x]); end; i:=1; while i = 99998 do begin while (a[i]0) and (a[i+1]0) and (a[i+2]0) do begin inc(sum); dec(a[i]); dec(a[i+1]); dec(a[i+2]); end; inc(i); end; writeln(sum); end. 最强阵容 (battle.cpp/pas/c) 【题目描述】 拿着新换来的英雄卡,小李满心欢喜的准备和同学们PK一下。 他们的游戏规则非常简单,双方把自己的牌绕成一圈,然后指定一个起点,从该张牌开始顺时针方向往后取,谁取出的字符串字典序更小(从左到右开始比较,碰到第一个不一样的字符进行比较,比较规则为ab…z)谁将获得胜利。具体规则可参考样例。虽然现在小李的牌已经很好了,但是你能不能帮他快速算出起始位置,使得他能够派出最强阵容。 【输入】 第一行n,表示共有n张牌。 第二行共n个用一个空格隔开的小写字母,表示给定的一圈牌起始序列。 【输出】 仅一个整数,能获得最小字典序字符串的起点位置。如果有多个位置开始的字符串一样,则输出最小的那个位置,且第一个位置从1开始。 【样例输入】 4 b c a b 【样例输出】 3 【样例说明】 四个位置取出的字符串分别为bcab,cabb,abbc,bbca,显然最小位

文档评论(0)

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

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

1亿VIP精品文档

相关文档