组队竞赛 &&删除公共字符

本系列将会记录平常一些容易忽略或者重要的概念笔记,和两道OJ编程题解题思路(没有源代码),点击编程题题目则可进入该链接进行答题。博客中一般不出现整个解题代码,主要是思路的记录。部分题目会有一部分解题的模块代码帮助理解。需要参考题目答案源代码,则点击最后一个标题则进入源代码地址,参考源代码。仓库:GitHub地址

目录

1、概念笔记

①printf("%m.ns")

②隐式转换

2、OJ编程

1、组队竞赛

2、删除公共字符

3、 源代码地址


1、概念笔记

  • ①printf("%m.ns")

对于这种%m.ns,则是输出m个字符的长度,但是只取字符串n个字符,这m个字符的位置为,这n个字符输出在(m-n ~m),前m-n个字符补充空格。如:

printf("%5.3s\n","computer"); 

则是

  • 隐式转换

若有定义语句: int a=10 ; double b=3.14 ; 则表达式 'A'+a+b 值的类型:为double

这就需要考虑隐式转换时的级别。

2、OJ编程

1、组队竞赛

牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。为了让比赛更有看点,牛牛想安排队伍使所有队伍的水平值总和最大。

解:因为是第二高水平值,又要最后水平值最大,可以先对这3*n个数进行升序排序。每次我们将最后一个两个数和第一个数组合,这时倒数第二个数就是这个中间数了,继续,将倒数第三个和倒数第四个与第二个组合,这时倒数第四个就是中间值,以此类推,这样就能保证这个有序的数据中,我们每三个数取到的中间数是最大的。如题中所举的例子:

team1:{1,2,5}, team2:{5,5,8}
排序后就是:
1,2,5,5,5,8

我们将倒数第一个数和倒数第二个数与第一个数进行组合

8    5    1

再将倒数第三个数和倒数第四个数与第二个数组合

5    5    2

这样就组合好了,最终取到的最大水平值就是 10。

于是总结规律就是,对于3 * n个数,用数组的下标表示就是[0, 3 * n - 1]。于是每次取到的中间值就是3 * n - 2、3 * n - 2、……一直到n + 1,因为n个队伍,按顺序取前面的数作为最小的数,会取 n 次。

2、删除公共字符

输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”

解:这道题可借助哈希的思想来解决。将第二个字符串的所有字符存入到一个<char, int>的哈希表中,然后通过遍历第一个字符串,观察第一个字符串的字符出现的次数是否大于0,如果大于0,说明该字符出现在第一个字符串中。

3、 源代码地址

上述两道题的参考代码链接,点击题目就可进入。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值