天梯赛练习集 简要题解 - L1

006 - 连续因子
  • 一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
  • 一个数值范围为 N N N的因子个数最多就是 2 × N 2\times\sqrt{N} 2×N
  • 而因子个数相乘不会超过 30 30 30个就会达到数值上限
  • 所以我们直接处理出来所有的因子,然后对于每个因子暴力判断最长的序列长度即可
  • 我们从小到大遍历因子得出答案自然就是最小的连续因子序列
  • 特判一下 n = 1 n = 1 n=1的情况
  • 代码链接➡
049 - 天梯赛座位分配
  • 天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情。为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位参赛选手。令每校选手排成一列纵队,第 i+1 队的选手排在第 i 队选手之后。从第 1 所学校开始,各校的第 1 位队员顺次入座,然后是各校的第 2 位队员…… 以此类推。如果最后只剩下 1 所学校的队伍还没有分配座位,则需要安排他们的队员隔位就坐。本题就要求你编写程序,自动为各校生成队员的座位号,从 1 开始编号。
  • 模拟一轮轮的座位分配,直至某一轮一个座位也分配不出去,即人都分配完毕了,就退出。记录一下上一次完成座位分配的队员是哪支队伍的,如果不是同一支直接坐,否则的话隔一个座位再分配
  • 注意细节
  • 代码链接➡
064 估值一亿的AI核心代码
  • 涉及多种 s t r i n g string string操作的字符串模拟题

  • 需求1:消除多余的空格,这个我们可以用stringstream来解决,细节就是消除后我们拼接的时候仍可能会需要空格,所以我们需要判断字母和数字的前面要补充一个空格用于拼接,可以用到函数isalnum( c )来判断字符c是否是字母或者数字。isalpha( c )是判断是否为字母的

  • 需求2:大写变小写,直接操作即可。

  • 需求3:字符替换操作,可以用string的replace函数,str.replace(a,b,ss)将字符串str的[a,a + b - 1]的字符串替换为ss(即位置a后面包括自己的b个字符用于替换),也可以写成str.replace(str.begin() + a,str.begin() + a + b,ss)。
    但有个需要特别注意的地方,这里提到了独立,所以我们find到一个位置并不一定要替换,需要判断一下这个字符是不是独立的(即我们判断这个串左侧和右侧是否是非数字或字母的,即标点符号或者为空格),还需要注意的是如果没找到的话我们要设置一个额外的偏移量,避免死循环一直找这个不合法的位置,这里用到了str.find(ss,pos)即从pos位置开始再去找ss这个串。
    还有一个点就是我现在换出来"I can",后面如果找"I"的时候又会把这个位置换掉,所以我们要么直接一遍输出一替换(不采用一次性替换好,直接输出答案),要么就是先把"I can"写成"A can",A这个位置随便用一个大写字母即可,因为通过操作2,大写字母已经不存在了,不会影响答案。

  • 需求4:同上,需要判断独立性。

  • 需求5:直接换即可。

  • 至此能够看到细节出现在替换后可能再次被替换需要变换一下,还有就是独立性的这个判断,不判断的话是有一个点过不去的,所以天梯赛题目的特点就是题干叙述的特殊性质一定是对应测试点的,一定要考虑

  • 代码链接➡

080 - 乘法口诀数列
  • 本题要求你从任意给定的两个 1 1 1位数字 a 1 a_1 a1 a 2 a_2 a2开始,用乘法口诀生成一个数列 { a n a_n an},规则为从 a 1 a_1 a1开始顺次进行,每次将当前数字与后面一个数字相乘,将结果贴在数列末尾。如果结果不是 1 位数,则其每一位都应成为数列的一项。
  • 其实 a 1 , a 2 a_1,a_2 a1,a2的范围都是 [ 0 , 9 ] [0,9] [0,9]所以直接每次判断结果的两位添加到序列末尾即可,如果是取余除法获取各个位的数值,不要忘记特判 0 0 0

其实,天梯赛L1的题目难度最高的就是纯模拟,比较恶心的就是涉及字符串操作,其余的题目只需要注意题目特别提醒过的细节,暴力即可解决基本全部问题,比赛时感觉L1的题目控制在35 - 40min满分解决比较合理,即使不满分切不可浪费过多的时间,做够40min,直接L2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值