第二届全国大学生算法设计与编程挑战赛冬季赛-题解python

A——塔(代码补全题)

第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第1张图片
解题思路:
第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第2张图片

代码如下:

'''
观察题目样例给出的高为5层的塔,可以得出以下几个规律
对于一个高为n层的塔而言,首先设最上面一层(顶层)为第一层。
1. 对于第i层而言,其字符的排列规律为:大写字母表中从第1个字符(A)~第i个字符,后又倒序从第i-1个字符~第1个字符(A)。
2. 第1~n-1层每层前都有空格,具体而言,对于第i行,字符前面的空格个数为n-i个。
找出以上规律后,我们就可以根据这些规律构造出答案:层高26的塔。

TIPS:
大写字母'A'为大写字母表第一个字符
对于大写字母表中第i个字符,可以使用'A'+i-1得到。
例如:第5个字符为'E',亦即为:'A'+5-1
'''

n=26;# 设定塔的层数为26
i=1

while i<=n:# 对塔每一层按照规律进行构造。
	# 首先进行输出空格的操作:对于第i行,字符前面的空格个数为n-i个。
    j=1
    while j<=n-i :#注意这里最右边的分号:为原python语法,不要修改
        print(" ",end="")
        j=j+1

    h=1
    while h<=i:# 按照规律1,输出第1~第i个大写字母。
        c1=chr(h+ord('A')-1)# 第j个大写字母为'A'+j-1
        print(c1,end="")# 输出第j个大写字母
        h=h+1

    k=h-2	#或者k=i-1
    while k>=1:# 按照规律1,输出第i-1~第1个大写字母,注意是倒序
        c2=chr(k+ord('A')-1)
        print(c2,end="")
        k=k-1
    print("")# 第i行输出结束,进行换行。
    i=i+1

B——日记(直接输出结果即可)

第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第3张图片
在这里插入图片描述
解题思路:
第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第4张图片

代码如下:

print('i love linkezbas je dosadna ovakemijaxaszxdbtddbtddbtddbtddbtddbtd')

C——哥布林

第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第5张图片
第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第6张图片
解题思路:
第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第7张图片
第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第8张图片
第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第9张图片
第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第10张图片
第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第11张图片
第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第12张图片

代码如下:

有空再研究

D——质数区间

第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第13张图片
第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第14张图片
代码如下:

不会

E——神仙爱采药

第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第15张图片
第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第16张图片
第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第17张图片
代码如下:

import sys
V = int(input())
s = input()
day = len(s)    #天数

pill_n = 0      #药丸数量
herb_n = 0      #药材数量         
weight2_n = 0   #重量为2的药材数量
for i in range(day):
    w = int(s[i])
    if V >= 2:
        if w == 2:
            weight2_n += 1
        V = V - w
        herb_n += 1
        pill_n += herb_n
    if V < 2:
        break
for j in range(i+1,day):
    w = int(s[j])
    if V==1 and w==1:
        V = V-w
        herb_n +=1
        pill_n += herb_n

    elif w==1 and weight2_n>=1:
        weight2_n -= 1
        pill_n += herb_n
        V = V+1 
    else:
        pill_n += herb_n
print(pill_n)
sys.exit(0)

F——但更爱字符串

第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第18张图片
第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第19张图片
代码如下:

不会

G——猫腥草争夺大战

第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第20张图片
第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第21张图片
第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第22张图片

代码如下:

不会

H——无限山河印的故事

第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第23张图片
第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第24张图片

代码如下:

不会

I——奇怪的传输机增加了

第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第25张图片第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第26张图片
代码如下:

import sys
N,x,y = map(int, input().split())
n = N #当前剩余数据量
# n_chuanshu = 0  #传输的数据量
flag = 1
for i in range(y):
    n = n*2/3
    
    if i >= (x-1) and flag == 1:
        n = n+ N/2
        flag = 0
    if n < N/32:
        print('N0!')
        print(i+1,end=' ')
        print('%.6f'%n)
        break
    if i==(y-1):
        print('YE5!')
        print('%.6f'%n)
sys.exit(0)

J——奇怪的小鸭子也增加了

第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第27张图片
代码如下:

import sys
A,B,a,b=map(int, input().split())
t_a = int(A/a)
na = int((t_a-1)/2+1)
t_b = int(B/b)
nb = int((t_b-1)/2+1)
print(int(na*nb))
sys.exit(0)

K——关于哥俩好数字这件事

第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第28张图片
代码如下:

def sta(a):
    num = str(a % 9)
    for i in range(a // 9):
        num += str(9)
    res = int(num)
    return res
    
def search_geliang(ss):
    ss = [ss0 for ss0 in ss]
    if len(ss) == 1:
        ss = ['0']+ss
    all = int(ss[-1])
    findindex = None
    for index in range(len(ss)-2, -1, -1):
        all += int(ss[index])
        if (not ss[index] == '9') and all > int(ss[index]):
            findindex = index
            break
    if findindex is None:
        ss = ['0']+ss
        index = 0
    else:
        index = findindex
    ss[index]=str(int(ss[index])+1)
    for i in range(index+1, len(ss)):
        ss[i] = '0'
    res = all-int(ss[index])
    n = res//9
    rres = res % 9
    for i in range(n):
        ss[len(ss)-i-1] = '9'
    ss[len(ss)-n-1] = str(rres)
    return ''.join(ss)

n = int(input())
result_cur = float('inf')
res_t = 0
if n <= 1000:
    a = 1
elif n <= 5000:
    a = 17
start_num = sta(a)  
cur_num = start_num
res_t = 0
for i in range(n):
    res_t += cur_num
    cur_num = int(search_geliang(str(cur_num)))

while res_t <= result_cur:
    result_cur = res_t
    a += 1 
    start_num = sta(a)  
    cur_num = start_num
    res_t = 0
    for i in range(n):
        res_t += cur_num
        cur_num = int(search_geliang(str(cur_num)))
print(result_cur)

L——我们仍未知道那窝蛋的名字

第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第29张图片
第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第30张图片
第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第31张图片
代码如下:

不会

M——签到题

第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第32张图片
第二届全国大学生算法设计与编程挑战赛冬季赛-题解python_第33张图片
代码如下:

N = int(input())
if N == 1:
    print('ADPC')
else:
    print(12345)

你可能感兴趣的:(全国大学生算法设计与编程挑战赛,python,算法)