招商银行信用卡中心MGeeker(提前批)-笔经
一.编程题1-20分
题目描述:
小招喵是一个商业巨腕,手下有n个公司,每一个公司他都对其有一个三位数编码,但是他现在想到了一种新的编码方式。
即原来的三位数的每一位数字0~9, 对应成4位二进制编码,
例如1对应0001,2对应0010,5对应0101,9对应1001.
那么三位数(可能小于一百,默认前导为0)
例如:
123对应000100100011
891对应100010010001
76对应000001110110
5对应000000000101
小招喵为了让别人不觉得他的新编码太没新意,他要求上述编码后的二进制串进行镜像反转(首尾反转),并且去除前导0,作为最终编码。小招喵忙于管理公司,让你帮忙处理出他每一个公司编码处理后的新编码是什么?
输入描述:
第一行一个整数n,1<=n<=100
第二行n个整数ai,0<=a<=999
输出描述:
n行,每一行代表原编码为ai对应的新编码
示例1:
输入:
10
1 2 3 123 5 8 999 777 156 95
输出:
100000000000
10000000000
110000000000
110001001000
101000000000
100000000
100110011001
111011101110
11010101000
101010010000
AC
n = int(input()) ls = list(map(int, input().split())) for i in ls: if i==0: print(0) else: s=str(i) cur="" for j in s: cur_le=bin(int(j))[2:] cur_le="0"*(4-len(cur_le))+cur_le cur+=cur_le if len(cur)<12: cur="0"*(12-len(cur))+cur res=cur[::-1].lstrip('0') print(int(res))
二.编程题2-30分
题目描述:
小招喵想要把k种不同的小写字母填到长度为n的序列中,对于每个小写字母,他可以使用多次,并且这k种字母都要出现,同时他还需要保证任意两个相邻的字母不相同。
小招喵想知道此时字典序最小的方案是什么,或者这根本不可能得到。
输入描述:
两个整数n,k。分别表示序列长度以及字符集大小1≤n≤10^5,1≤k≤26
输出描述:
若不存在一个合法的方案,则输出-1
否则输出一行字符串表示答案
示例1
输入:
6 2
输出:
ababab
示例2
输入:
6 7
输出:
-1
import sys n, k = [int(i) for i in sys.stdin.readline().strip().split()] en_char = 'abcdefghijklmnopqrstuvwxyz' if k == 1: if n == 1: print('a') else: print(-1) else: if k > n: print(-1) else: res = [] abflag = True for i in range(n - k + 2): if abflag: res.append('a') abflag = False else: res.append('b') abflag = True for i in range(k - 2): res.append(en_char[i + 2]) print(''.join(res))
三.编程3-50分
题目描述:
一开始有一个大小为s的史莱姆,每次可以从现有的史莱姆中选择一个大小大于 1的史莱姆,设它的大小为k,将它分裂成a和k- a(1 <=a < k)大小的两个史莱姆,得到收益a*(k-a)。
给定s, m,求最少分裂几次才能得到至少m的收益,如果无法达到输出-1。
输入描述:
一行两个数字s,m。
2≤s≤10^3,1≤m≤10^9
输出描述:
一行一个数字表示答案
示例1
输入:
333 43434
输出:
4
s ,count = [int(i) for i in input().split(' ')] #考虑特殊情况 if count==0: sum1=0 elif count<=s*s/4: sum1=1 else: c=0 n=1 while c<count: c=c+float(s**2/2**(n+1)) n+=1 #计算批次N #计算第N批分裂的次数 c=c-float(s**2/2**n) #此时c的值为前N-1批的能量和 last=count-c n1=s/2**(n-1) n1=n1*n1 n2=last//n1+1#第N批的分裂次数 n=n-2 #前N-1批的分裂次数加本批分裂次数 sum1=2**n-1+n2 print(sum1)
小白一枚,有误的地方还请大佬们指正