目录
题目名称:吃!吃!吃!
时间限制:1000ms内存限制:256M
题目描述
已知n个整数。 每3个数算一个周期。 不足一个周期补0. 在周期的第一个位置的数的权值和等于a1+a[1+3]+… … 求三个数的最大权值。 如果最大权值为第一个数,输出’J’; 最大权值为第二个数,输出’H’; 最大权值为第三个数,输出’B’。
输入描述:
第一行输入一个整数n。(1<=n<=100) 第二行输入n个整数。
输出描述:
输出答案。
示例
示例1
输入4
1 1 1 1复制
输出J
模板
# 请关闭中文输入法,用英文的字母和标点符号。
# 如果你想运行系统测试用例,请点击【执行代码】按钮,如果你想提交作答结果,请点击【提交】按钮,
# 注意:除答案外,请不要打印其他任何多余的字符,以免影响结果验证
# 本OJ系统是基于 OxCoder 技术开发,网址:www.oxcoder.com
# 模版代码提供基本的输入输出框架,可按个人代码习惯修改
class Solution:
def __init__(self) -> None:
pass
def solution(self, n, arr):
result = None
# TODO: 请在此编写代码
return result
if __name__ == "__main__":
n = int(input().strip())
arr = [int(item) for item in input().strip().split()]
sol = Solution()
result = sol.solution(n, arr)
print(result)
解题思路:
1、已知n个整数。 每3个数算一个周期。 不足一个周期补0.
如果不是完整的3的周期数,则有:n % 3!= 0,
2、凑齐3的最小倍数,调用math函数库: math.ceil(n / 3) * 3,尾部循环补0,arr.append(0)
以示例为例,输入1 1 1 1,补0后,arr= [1, 1, 1, 1, 0, 0]
3、”第一个位置的数的权值和等于res1+res[1+3]+… … 求三个数的最大权值”
释义:
将每个周期内的三个位置分别定义为0,1,2,不同周期的相同位置加和,并保存在数组res中
如果最大的加和(题意所指的最大权重)出现的位置是在0位(即最大权值为第一个数),则,输出‘J’;
如果最大的加和(题意所指的最大权重)出现的位置是在1位(即最大权值为第二个数),则,输出‘H’;
其他情况,出现在2位(最大权值为第三个数),输出’B’
示例代码:
import math
class Solution:
def __init__(self) -> None:
pass
def solution(self, n, arr):
result = None
res= []
if n % 3 != 0:
for i in range(n, math.ceil(n / 3) * 3):
arr.append(0)
n += 1
for i in range(0, 3):
sum_i = 0
for j in range(0, int(n / 3)):
sum_i += arr[i + 3 * j]
res.append(sum_i)
if res.index(max(res)) == 0:
result = "J"
elif res.index(max(res)) == 1:
result = "H"
else:
result = "B"
return result
if __name__ == "__main__":
n = int(input().strip())
arr = [int(item) for item in input().strip().split()]
sol = Solution()
result = sol.solution(n, arr)
print(result)
PS: Python index()方法
https://www.runoob.com/python/att-string-index.html
描述
Python index() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法与 python find()方法一样,只不过如果str不在 string中会报一个异常。
语法
index()方法语法:
str.index(substring, beg=0, end=len(string))
参数
- substring -- 指定检索的字符串。
- beg -- 开始索引,默认为 0。
- end -- 结束索引,默认为字符串的长度。
返回值
如果包含子字符串返回开始的索引值,否则抛出异常。
实例
以下实例展示了 index() 方法的实例:
实例(Python 2.0+)
#!/usr/bin/python
str1 = "this is string example....wow!!!"
str2 = "exam"
print str1.index(str2)
print str1.index(str2, 10)
print str1.index(str2, 40)
以上实例输出结果如下:
15
15
Traceback (most recent call last):
File "test.py", line 8, in
print str1.index(str2, 40);
ValueError: substring not found
shell returned 1
注意:在接下来的几个章节中,我们会详细介绍 Python Exception 的使用。
PS2: Python math.ceil() 方法
引自:https://www.runoob.com/python3/ref-math-ceil.html
Python math.ceil(x) 方法将 x 向上舍入到最接近的整数。
math.floor() 方法将数字向下舍入到最接近的整数。
语法
math.ceil() 方法语法如下:
math.ceil(x)
参数说明:
- x -- 必需,数字。如果 x 不是一个数字,返回 TypeError。
返回值
返回一个整数,表示舍入的数字。
实例
以下实例返回向上舍入到最接近的整数:
实例
# 导入 math 包
import math
# 输出向上舍入到最接近的整数
print(math.ceil(1.4))
print(math.ceil(5.3))
print(math.ceil(-5.3))
print(math.ceil(22.6))
print(math.ceil(10.0))
输出结果:
2
6
-5
23
10