题目 | 类型 | 难度 |
---|---|---|
Average | 执行 | ★ |
Tri-triangle | 找规律 | ★★★ |
Arithmetic Sequence | 执行 | ★ |
Dual Prime | 筛法 | ★★★★ |
String Hash | 进制转换 | ★★★ |
Cute String | 统计 | ★★ |
Harmonic Porgression | 辗转相除 | ★★★ |
Good Number | 找规律,递推 | ★★★★ |
Average
题意
Alice和Bob各出了一部分钱,求平分分摊情况下,谁应该给谁多少钱?
思路
签到题,直接做就可以了,无论是判断奇偶分情况处理或者是直接用浮点都可以的。
代码
1 |
|
1 |
|
Tri-triangle
题意
按要求输出对应的字符图形
思路
典型的找规律题,考察观察力和循环的使用。
常见的做法有两种,一种是传统的按行列分布的规律图形的输出,一种使用二维数组作为缓冲,输出图形。
第一种做法比较直接,第二种写起来稍微麻烦点,下面我们介绍第一种传统做法。
明显图形分成两部分,第一部分是一个三角形,第二部分是下面的两个三角形。
对于第一部分,n = c - ‘A’ + 1
表示三角的行数,i
从0
开始。
第i
行输出的字符为
- 输出
n-i-1
个空格 - 从’A’开始,输出
i+1
个上升字符 - 输出字符-=2,输出
i
个下降字符 - 输出换行
对于第一部分,n = c - ‘A’ + 1
表示三角的行数,i
从0
开始。
第i
行输出的字符为
- 输出
n-i-1
个空格 - 从’A’开始,输出
i+1
个上升字符 - 输出字符-=2,输出
i
个下降字符 - 输出
2*n-2*i-1
个空格 - 从’A’开始,输出
i+1
个上升字符 - 输出字符-=2,输出
i
个下降字符 - 输出换行
代码
1 |
|
Arithmetic Sequence
题意
验证一个序列是否是等差数列。
思路
直接做,注意等差数列的差值可以是负数。
代码
1 |
|
Dual Prime
题意
求区间内,等于两个不同素数乘积的合数的个数。
思路
类似于素数筛法。我们考虑素数筛法时,把原来的标记0
表示素数,1
表示非素数,改为被素数筛的时候,标记过多少次。
一个符合条件的合数$n$,会被标记$1$次;(自己想想为什么?)
但被标记$1$次的还有像$m = p^2q\, \mid \,p,q是素数\,,\,并且q>\sqrt{m} \; or \; q = 1$的数,所以把$p^2$的倍数再标记1次。
就能筛出所有的符合条件的数。
题目时限给的比较松,有其他枚举的做法也可以过。
代码
1 |
|
String Hash
题意
把只含小写英文字母的字符串看成首位是1的26进制数,求其对$1,000,000,007$取模的值。
思路
进制转换的裸题。注意需要使用64位整数来防止溢出。
代码
1 |
|
Cute String
题意
统计单词数和字母出现的种类数是否超过10。
思路
一个计数器统计单词数,根据题目输入,直接统计空格和串结束符;
再用一个26个的计数器数组来统计对应的字母是否出现,遍历计数器数组计算一共出现了多少个字母。
代码
1 |
|
Harmonic Porgression
题意
求调和级数的一段,使用分数表示结果
思路
直接做即可,相当于每次都是一次分数加,注意使用64位整数防止溢出。
代码
1 |
|
Good Number
题意
求$n$位无前导$0$的二进制数中,数码$1$比数码$0$多的数的个数。
思路
如果$n=1$,那么结果为$1$。
对于$n>1$,如果$n$是偶数,首位必须是$1$,那么余下的$n-1$位的中,只要存在$i \ge \frac{n}{2}$个$1$,那么就是符合条件的数。
如果$n$是奇数,首位必须是$1$,那么余下的$n-1$位的中,只要存在$i \ge \frac{n-1}{2}$个$1$,那么就是符合条件的数。
综上
所以,先利用递推求出组合数即可。注意使用64位整数。
代码
1 |
|