不太习惯比赛用的编辑器,没法做过程的调试,这个就很考基本功了。
一是是对算法已经完全心理有数,要不然调试起来很困难。
二是要对语法非常熟,像我这种经常要查语法帮助的人,哈哈哈。

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
- # -*- coding: utf-8 -*-
-
- # Project: game
- # File : main.py
- # Author : Long.Xu
- # 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