网站建设捌金手指花总十七,中山模板建站软件,wordpress网店模板,国内专业网站制作1. 旋转字符串
1.1 问题描述
给定一个字符串#xff08;以字符数组的形式#xff09;和一个偏移量#xff0c;根据偏移量原地从左向右旋转字符串。
1.2 问题示例
输入strabcdefg#xff0c;offset3#xff0c;输出efgabcd。
输入strab…1. 旋转字符串
1.1 问题描述
给定一个字符串以字符数组的形式和一个偏移量根据偏移量原地从左向右旋转字符串。
1.2 问题示例
输入strabcdefgoffset3输出efgabcd。
输入strabcdefgoffset0输出abcdefg。
输入strabcdefgoffset1输出gabcdef返回旋转后的字符串。
输入strabcdefgoffset 2输出fgabcde返回旋转后的字符串。
提示在 Python 中字符串是不能进行修改的如果要修改字符串中的字符可以先转换成列表。
要求至少使用到 2 种以上的的解决方法。
1.3 解题思路
1.3.1 使用字符串的切片一
def rotate_str(s, offset):if len(s) 0:# 如果offset offset % len(s)# 使用切片s s[-offset:] s[0:len(s)- offset]return ss input(请输入一个字符串)
offset int(input(请输入偏移量))
s rotate_str(s, offset)
print(s)1.3.2 使用列表的 pop 和insert方法
def rotate_str_(s, offset):if len(s) 0:offset offset % len(s)# 转换成列表lst list(s)for i in range(offset):lst.insert(0, lst.pop())# 返回字符串 return .join(lst)s input(请输入一个字符串)
offset int(input(请输入偏移量))
s rotate_str_(s, offset)
print(s)1.3.3 使用字符串的切片二
def rotate_str_01(s, offset):if len(s) 0:offset offset % len(s)# 原字符串扩大 2 倍s (s * 2)[len(s) - offset:2 * len(s) - offset]return ss input(请输入一个字符串)
offset int(input(请输入偏移量))
s rotate_str_01(s, offset)
print(s)2. 相对排名
2.1 问题描述
根据N名运动员得分找到相对等级和获得最高分前 3名的人分别获得金牌、银牌和铜牌。N是正整数并且不超过10 000。所有运动员的成绩都保证是独一无二的。
2.2 问题示例
输入运动员的得分 [54321]输出[金牌银牌铜牌45]前3名运动员得分较高根据得分依次获得金牌、银牌和铜牌。对于后两名运动员根据分数输出相对等级。
输入运动员的成绩[6,5,1,8,4,3]输出 [银牌,铜牌,6,金牌,4,5]。
提示输入的运动员成绩不一定刚开始就是有序的。
2.3 解题思路
#运动员的成绩
scores [6, 5, 1, 8, 4, 3]
# 由高向低排序成绩
sort_scores sorted(scores, reverseTrue)
# 保存每一个成绩的名次
dic {}
for i in range(len(sort_scores)):if i 0:dic[sort_scores[i]] 金牌elif i 1:dic[sort_scores[i]] 银牌elif i 2:dic[sort_scores[i]] 铜牌else:dic[sort_scores[i]] i 1res []
for i in scores:res.append(dic[i])
print(res)[银牌, 铜牌, 6, 金牌, 4, 5]3. 下一个更大的数
3.1 问题描述
两个不重复的数组nums1和nums2其中nums1是nums2的子集。在nums2的相应位置找到nums1所有元素的下一个更大数字。nums1中的数字x的下一个更大数字是nums2中x右边第1个更大的数字。如果它不存在则为此数字输出-1。nums1和nums2中的所有数字都是唯一的nums1和nums2的长度不超过1000。
3.2 问题示例
输入nums1[412]nums2[1342]输出[-13-1]。
对于第1个数组中的数字4在第2个数组中找不到下一个更大的数字因此输出-1。对于第1个数组中的数字1第2个数组中的下一个更大数字是3。对于第1个数组中的数字2第2个数组中没有下一个更大的数字因此输出-1。
提示注意审题。
3.3 解题思路
3.3.1 使用列表的index方法
nums1 [4, 1, 2]
nums2 [1, 3, 4, 2]res []
for i in nums1:# 在nums1中的数字在nums2中的位置pos nums2.index(i)flag -1# 是否存在比自己大的数字if len(nums2)-1 pos 1 is not None and nums2[pos 1] i:flag nums2[pos 1]res.append(flag)print(res)输出结果
[-1, 3, -1]3.3.2 使用栈
nums1 [4, 1, 2]
nums2 [1, 3, 4, 2]
# 保存结果
res {}
# 栈
stack []
for i in nums2:# 查找栈顶数据是否比自己小if len(stack) 0 and stack[-1] i:res[stack[-1]] istack.pop()stack.append(i)
for i in stack:res[i] -1for i in nums1:print(res[i], end )提示也可以先把nums2中的数字按先后顺序压入到栈中然后提取栈顶数据
nums1 [4, 1, 2]
nums2 [1, 3, 4, 2]res {}
stack []
# 把nums2中的数字全部压入栈中
for i in nums2:stack.append(i)
pre_top None
for i in range(len(stack)):# 提取栈顶数据top stack[-1]if pre_top is not None and top pre_top:res[top] pre_topelse:res[top] -1 pre_top stack.pop()
for i in nums1:print(res[i], end )4. 点积
4.1 问题描述
给出2个列表求它们的点积。
4.2 问题示例
输入为A[111]和B[222]输出为61*21*21*26。输入为A[32]和B[233]输出为-1没有点积。
提求至少 2 种方法实现。直接使用列表和numpy。
4.3 解题思路
4.3.1 使用列表
a [1, 1, 1]
b [2, 2, 2]
res 0
if len(a) len(b):for i in range(len(a)):res a[i] * b[i]
print(res)4.3.2 使用 numpy
import numpy as np
a [1, 1, 1]
b [2, 2, 2]
res 0
a np.array(a)
b np.array(b)
res a.dot( b)
print(res)5. 查询区间
5.1 问题描述
给定一个包含若干个区间的List列表长度是1000如[5001500]、[21003100]。给定一个number判断number是否在这些区间内返回True或False。
5.2 问题示例
输入是lst[[1001100][10002000][55006500]]和number6000输出是True因为6000在区间[55006500]。
输入是lst[[1001100][20003000]]和number3500输出是False因为3500不在lst的任何一个区间中。
5.3 解题思路
lst [[100, 1100], [1000, 2000], [5500, 6500]]
number 6000
is_exist False
for i in lst:if number min(i) and number max(i):is_exist Truebreak
print(is_exist)6. 新郎和新娘
6.1 问题描述
有三对情侣结婚假设三个新郎为A、B、C三个新娘为X、Y、Z。
有参加婚礼的人搞不清谁和谁结婚所以去询问了这六位新人中的三位得到的回答为
新郎A说他要和新娘X结婚新娘X说她的未婚夫是新郎C而新郎C说他要和新娘Z结婚。听到这样的回答后提问者知道他们都是在开玩笑说的都是假话但他仍搞不清谁和谁结婚。
现在请编程求出到底哪位新郎和哪位新娘结婚。
6.2 解题思路
xin_lang [A, B, C]
for x in xin_lang:for y in xin_lang:for z in xin_lang:if x ! xin_lang[0] and x ! xin_lang[2] and z ! xin_lang[2] and x ! y and x ! z and y ! z:print(X, x)print(Y, y)print(Z, z)7. 编写求平均分的函数
7.1 问题描述
输入学生的成绩把学生的成绩传入自定义函数函数输出学生成绩的平均分。
提示学生人数不限。自定义函数接收一个列表输出平均分。
7.2 解题思路
def get_avg(lst):s 0for i in lst:s ireturn s / len(lst)scores []
for i in range(5):s int(input(请输入学生成绩))scores.append(s)res get_avg(scores)
print(res)8.提取单词
8.1 问题描述
如有一个字符串”this is a test”请根据用户指定的单词位置输出单词。如 用户输入 4 则输出 test。
提示必须通过调用自定义函数实现效果。
8.2 解题思路
def get_word(s, pos):lst s.split( )return lst[pos - 1]
#
s this is a test
w get_word(s, 4)
print(w)9. 求年龄
9.1 问题描述
有5个人坐在一起问第五个人多少岁他说比第4个人大2岁。问第4个人岁数他说比第3个人大2岁问第三个人又说比第2人大两岁。问第2个人说比第一个人大两岁最后问第一个人他说是10岁。请问第五个人多大
9.2 解题思路
age10
def get_age(age):for i in range(4):ageage2return age
print (get_age(age))10. 回文数函数
10.1 问题描述
实现判断一个数是不是回文数的函数。
10.2 解题思路
def get_huiwei(num):if str(num)[::-1] str(num):return Truereturn False
print(get_huiwei(12312))