一.编程题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)
京公网安备 11010502036488号