不太习惯比赛用的编辑器,没法做过程的调试,这个就很考基本功了。
一是是对算法已经完全心理有数,要不然调试起来很困难。
二是要对语法非常熟,像我这种经常要查语法帮助的人,哈哈哈。
100分共四道题,我只得分47.5
后面在本机环境下重做了一下,习惯了IDE后回不去了。
题目如下:
1、题目名称:寻因找祖 寻找因子个数为n的最小整数x.
2、题目名称:通货膨胀-x国货币 X国发行货币最高面额为n。 次高面额为n的因子。 以此类推。 X国最多发行多少种货币。
3、题目名称:莫名其妙的键盘 有一个神奇的键盘,你可以用它输入a到z的字符,然而每当你输入一个元音字母(a,e,i,o,u其中之一)的时候,已输入的字 符串会发生一次反转! 比方说,当前输入了tw,此时再输入一个o,此时屏幕上的字符串two会反转成owt。 现给出一个 字符串,若用该键盘输入,有多少种方法可以得到?
4、题目名称:三而竭 一鼓作气再而衰三而竭。 小艺总是喜欢把任务分开做。 小艺接到一个任务,任务的总任务量是n。 第一天小艺能完成x份 任务。 第二天能完成x/k。 。。。 第t天能完成x/(k^(t-1))。 小艺想知道自己第一天至少完成多少才能完成最后的任务。
#!/usr/bin/env python标签:尝试,return,mianzi,编程,lst,result,str,挑战赛,输入 From: https://blog.51cto.com/fangkailove/5881792
# -*- coding: utf-8 -*-
# Project: game
# File : main.py
# Author : Long.Xu <fangkailove@yeah.net>
# http://gnolux.blog.csdn.net
# QQ:26564303 weixin:wxgnolux
# Time : 2022/9/4 08:51
# Copyright 2022 Long.Xu All rights Reserved.
import math
def s1(n):
"""
求n因子的最小整数
:param n:
:return:
"""
def get_pcs(num):
result = 0
lst = []
for i in range(1, int(math.sqrt(num)) + 1):
r = num / i
if int(r) == r:
lst.append(int(r))
result = result + 1
if i != int(r):
lst.append(i)
result = result + 1
# print(num,lst)
return result, lst
i = 1
while True:
r, ls = get_pcs(i)
if r == n: break
i = i + 1
print("试题1:因子个数为 %s 的最小整数是:%s" % (n, i), ls)
def s2(n):
"""
一套货币最高面值为n,那么次面值为n的最大因子n(i),
次次面值为n(i)的最大因子n(i+1),依此类推
求一个最大面值货币所包含的所有面值。
:param n:
:return:
"""
result = None
mianzi = [n]
mianzi_biaoji = [0]
j = 0
while 0 in mianzi_biaoji:
for i in range(mianzi[j] - 1, 0, -1):
k = mianzi[j] / i
if int(k) == k:
if not (i in mianzi):
mianzi.append(i)
mianzi_biaoji.append(0)
break
mianzi_biaoji[j] = 1
j = j + 1
result = len(mianzi)
print("试题2:最高面值", n, "所有面值:", mianzi, '数量:', result)
return result
def s3(str):
"""
字母字符串输入规则碰到元音就反转,
如:输入cbe 就会得到目标ebc.
按此规则,求为获取一个目标字串的输入方法的个数
:param str:
:return:
"""
a = 'aoeiu'
lst = []
def s(ss='', path=''):
if len(ss) < len(str):
for c in str:
t = ss + c
pp = path + c
if c in a:
ls = list(t)
ls.reverse()
t = ''.join(ls)
if t == str:
# print('目标:', str, '输入方法:', ss, c, pp)
if not (pp in lst):
lst.append(pp)
else:
s(t, pp)
s()
print('试题3:目标字串:', str, "输入方法:", lst, "数量:", len(lst))
return len(lst)
def s4(n, k):
"""
:param n:
:param k:
:return:
"""
def do_free(job, x):
for t in range(2, 10 + 1):
job = job - x / (k ** (t - 1))
if job <= 0:
return True
return False
for x in range(0, n):
job = n - x
if do_free(job, x):
print("试题4:n=%s,k=%s, 第一天要完成:%s" % (n, k, x))
return x
s1(100)
s2(100)
s3('aciduf')
# 这一题好像这个示例是得到 54 我这个是53,感觉还是题目有什么隐含的题意,没搞清楚。
s4(59, 9)
输出:
-------------------
试题1:因子个数为 100 的最小整数是:45360 [45360, 1, 22680, 2, 15120, 3, 11340, 4, 9072, 5, 7560, 6, 6480, 7, 5670, 8, 5040, 9, 4536, 10, 3780, 12, 3240, 14, 3024, 15, 2835, 16, 2520, 18, 2268, 20, 2160, 21, 1890, 24, 1680, 27, 1620, 28, 1512, 30, 1296, 35, 1260, 36, 1134, 40, 1080, 42, 1008, 45, 945, 48, 840, 54, 810, 56, 756, 60, 720, 63, 648, 70, 630, 72, 567, 80, 560, 81, 540, 84, 504, 90, 432, 105, 420, 108, 405, 112, 378, 120, 360, 126, 336, 135, 324, 140, 315, 144, 280, 162, 270, 168, 252, 180, 240, 189, 216, 210]
试题2:最高面值 100 所有面值: [100, 50, 25, 5, 1] 数量: 5
试题3:目标字串: aciduf 输入方法: ['iducaf', 'diucaf'] 数量: 2
试题4:n=59,k=9, 第一天要完成:53