当前位置: 首页 > 面试经验 >

8.27 京东笔试

优质
小牛编辑
99浏览
2023-03-28

8.27 京东笔试

京东集团,前端开发卷,三道编程题,比较容易,很快就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~)


#京东笔试##京东#
 类似资料: