京东集团,前端开发卷,三道编程题,比较容易,很快就A了。
第一题:输入俩数 n, k ,然后是一个长度为 n 的字符串。将前 k 个字母变成大写,后 n - k 个字母变成小写
入门题,不需要过多解释。只能说python的API真的很强大
n, k = [int(x) for x in input().split()]
s = input()
print(s[:k].upper() + s[k:].lower())
第二题:输入正整数 n。输出一个正方形矩阵,要求包含的数为 1 ~ n^2,且相邻的数和为奇数(满足要求即可,答案不唯一)
如果n为奇数,直接傻瓜式输出(从左上角,依次写1, 2, ..., n^2,写满换行)即可。
如果n为偶数,则在傻瓜式输出的基础上,奇数行向右移动一格即可。比如 4*4 的矩阵,就这样子输出
1 2 3 4
8 5 6 7 // 先输出最大的数,然后按顺序输出 n-1 个数字
9 10 11 12
16 13 14 15
n = int(input())
for i in range(n):
if not n & 1 and i & 1: # 如果 n 为偶数,则第奇数行先输出最大数
print(str([i*n+n] + list(range(i*n+1, i*n+n)))[1:-1].replace(',',''))
else:
print(str(list(range(i*n+1, i*n+n+1)))[1:-1].replace(',',''))
第三题:【长城数组】要求数组内每个数两边的数都相等,且和它本身不相等。输入 n ,和一个长度为 n 的任意数组。你需要修改其中的数,使得它变为“长城数组”。
输出最少需要修改几个数
思路:“长城数组”其实就是奇数位置(第1,3,5,...个)均相等、偶数位置均相等,且不全相等的数组。因此需要分别记下来原数组中奇数位、偶数位上每个数字出现的次数,最终我们留下出现最多的数,其他都替换成这个数。但是,有一种特殊情况,那就是这两个数相同,此时只能让奇数位或者偶数位“退而求其次”,即替换成出现第二多的数。所以需要对比一下,奇数位和偶数位换哪个需要的额外次数更小。
from collections import defaultdict
n = int(input())
nums = [int(x) for x in input().split()]
odd = defaultdict(int) # 记录奇数位置的数字频率
even = defaultdict(int) # 记录偶数位置的数字频率
for i in range(n):
if i & 1:
odd[nums[i]] += 1
else:
even[nums[i]] += 1
a = max(odd, key=lambda x: odd[x]) # 奇数位出现最多的数
b = max(even, key=lambda x: even[x]) # 偶数位出现最多的数
if a != b:
print(n - odd[a] - even[b])
else: # 因为“长城数组”不能全部相同,因此需要看第二多的数的频率
t1, t2 = odd[a], even[b]
odd[a] = even[b] = 0
a = max(odd, key=lambda x: odd[x]) # 奇数位出现第二多的数
b = max(even, key=lambda x: even[x]) # 偶数位出现第二多的数
if t1 - odd[a] > t2 - even[b]: # 判断奇数位还是偶数位采用次高频率
print(n - t1 - even[b])
else:
print(n - t2 - odd[a])
帅哥美女路过点个赞吧(~v~)
#京东笔试##京东#