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