6-1 sdut-使用函数求a+aa+aaa++⋯+aa…aaa(n个a)之和
给定两个均不超过9的正整数a和n,要求:编写函数fn(a,n), 求a+aa+aaa++⋯+aa⋯aa(n个a)之和,fn须返回的是数列之和。
函数接口定义:
def fn(a,n):
其中, a 和 n 都是传入的参数。 a 的值在[1, 9]范围;n 是[1, 9]区间内的个位数。函数返回数列之和。
裁判测试程序样例:
/* 请在这里填写答案 */
a,b=input().split()
s=fn(int(a),int(b))
print(s)
输入样例:
在这里给出一组输入。例如:
2 3
输出样例:
在这里给出相应的输出。例如:
246
代码:
def fn(a, n):
return sum([int('1' * i) * a for i in range(1, n + 1)])
6-2 sdut-使用函数求区域内的素数之和
设计函数,求指定范围内的素数之和。
函数1:prime§, 用户传入参数p
,若它为素数时返回True,否则返回False.
函数2:PrimeSum(m,n),返回区间[m, n]
内所有素数的和(其中,1<=m<n)。
函数接口定义:
prime( p ),返回True表示p是素数,返回False表示p不是素数;
PrimeSum(m,n),函数返回素数之和。
在这里解释接口参数。例如:其中 N 和 D 都是用户传入的参数。 N 的值不超过int的范围; D 是[0, 9]区间内的个位数。函数须返回 N 中 D 出现的次数。
裁判测试程序样例:
/* 请在这里填写答案 */
m,n=input().split()
m=int(m)
n=int(n)
print(PrimeSum(m,n))
输入样例:
1 10
输出样例:
17
代码:
def prime(p):
if p == 0 or p == 1:
return False
for i in range(2, int(p ** 0.5) + 1):
if p % i == 0:
return False
return True
def PrimeSum(m, n):
return sum([i for i in range(m, n + 1) if prime(i) is True])
6-3 sdut-使用函数统计数字字符在某数字中出现的个数
设计函数,统计数字字符在某数字中出现的个数。
函数接口定义:
CountDigit(number,digit )
其中,number是整数,digit为[1, 9]区间内的整数数值;返回number中digit出现的次数。
裁判测试程序样例:
/* 请在这里填写答案 */
number,digit=input().split()
number=int(number)
digit=int(digit)
count=CountDigit(number,digit )
print("Number of digit 2 in "+str(number)+":",count)
输入样例:
在这里给出一组输入。例如:
-21252 2
输出样例:
Number of digit 2 in -21252: 3
代码:
def CountDigit(number, digit):
return str(number).count(str(digit))
6-4 sdut-使用函数输出Fibonacci数列的值与指定范围内Fibonacci数值的个数
设计函数实现:计算第n项Fibonacci数列数值,并求出两正整数a和b所组成的闭区间[a,b]
(0<a<b≤100000)之间的所有Fibonacci数的数目。
Fibonacci数列,任一项数字是前两项的和(最开始两项均定义为1)的数列, fib(0)=fib(1)=1
。
函数接口定义:
fib(n) #函数1
fibs(a, b) #函数2
fib(n):返回第n项Fibonacci数;
fibs(a, b):返回 [a, b] 中的所有Fibonacci数组成的列表。
n、a、b均为正整数。
裁判测试程序样例:
/* 请在这里填写答案 */
n,a,b=input().split()
n=int(n)
a=int(a)
b=int(b)
fb=fib(n)
print("fib({0}) = {1}".format(n,fb))
fiblist=fibs(a, b)
print(len(fiblist))
输入样例:
在这里给出一组输入。例如:
6 20 100
输出样例:
在这里给出相应的输出。例如:
fib(6) = 13
4
代码:
Fib = [1, 1]
def fib(n):
if n == 0 or n == 1: return 1
return fib(n - 1) + fib(n - 2)
def fibs(a, b):
while (Fib[-1] <= b):
Fib.append(Fib[-1] + Fib[-2])
return [t for t in Fib if a <= t <= b]
6-5 sdut-利用函数得到缩写词
缩写词是由一个短语中每个单词的第一个字母组成,均为大写。
例如,CPU是短语“central processing unit”的缩写。
函数接口定义:
acronym(phrase);
参数:phrase是字符串短语,函数返回:短语的缩写词。
裁判测试程序样例:
/* 请在这里填写答案 */
phrase=input()
print(acronym(phrase))
输入样例:
central processing unit
输出样例:
CPU
代码:
def acronym(phrase):
txt = ""
for c in [s[0] for s in list(phrase.title().split())]:
txt += c
return txt
6-6 sdut-求嵌套列表的平均值
Avg是一个求平均值的函数。它的参数是嵌套列表,求每个元素的平均值。每个元素是列表,至少有1个值。
函数接口定义:
Avg(lst)
lst是一个二维嵌套列表,该函数返回值是每个元素的平均值组成的列表。
裁判测试程序样例:
/* 请在这里填写答案 */
lst=eval(input())
result=Avg(lst)
for value in result:
print("{:.1f}".format(value),end=" ")
输入样例:
[[95,92,80],[66,75,40],[89,72,100,91]]
输出样例:
89.0 60.3 88.0
代码:
def Avg(ls_a):
return [(sum(it) / len(it) * 1.0) for it in ls_a]
7-1 sdut-求全排列
输入整数n(3<=n<=7),编写程序输出1,2,…,n整数的全排列,按从小到大的顺序输出。
输入格式:
在一行内,输入正整数n。
输出格式:
按数值从小到大的顺序输出1到n的全排列。每种排列占一行,数字间无空格。
输入样例:
3
输出样例:
123
132
213
231
312
321
代码:
from itertools import *
def per(num):
for s in permutations([int(x) for x in range(1, num + 1)]):
for it in str(s):
if it.isdigit():
print(it, end='')
print()
n = int(input())
per(n)
7-2 sdut-列表元素个数的加权和(1)
输入一个嵌套列表,嵌套层次不限,根据层次,求列表元素的加权的元素个数之和。
第一层每个元素算一个元素,第二层每个元素算2个元素,第三层每个元素算3个元素,第四层每个元素算4个元素,…,以此类推!
输入格式:
在一行中输入一个列表。
输出格式:
在一行中输出加权元素个数值。
输入样例:
[1,2,[3,4,[5,6],7],8]
输出样例:
在这里给出相应的输出。例如:
15
代码:
def cycle(s, cnt):
sum = 0
for it in s:
if isinstance(it, int):
sum += cnt
elif isinstance(it, list):
sum += cycle(it, cnt + 1)
return sum
s, cnt = eval(input()), 1
print(cycle(s, cnt))
7-3 sdut-列表数字元素加权和(2)
输入一个嵌套列表,嵌套层次不限,根据层次,求列表元素的加权和。
第一层每个元素 的值为:元素值*1,第二层每个元素的值为:元素值*2,第三层每个元素的值为:元素值*3, ...,以此类推!
输入格式:
在一行中输入列表。
输出格式:
在一行中输出元素加权之和。
输入样例:
[1,2,[3,4,[5,6],7],8]
输出样例:
72
代码:
def cycle(s, cnt):
sum = 0
for it in s:
if isinstance(it, int):
sum += it * cnt
elif isinstance(it, list):
sum += cycle(it, cnt + 1)
return sum
s, cnt = eval(input()), 1
print(cycle(s, cnt))
7-4 sdut-列表或元组的数字元素求和(yeild)
求列表中数字和,列表中嵌套层次不限。
输入格式:
在一行中输入列表或元组。
输出格式:
在一行中输出数字的和。
输入样例:
[11,2,[3,7],(68,-1),"123",9]
输出样例:
99
代码:
def cycle(s):
sum = 0
for it in s:
if isinstance(it, int):
sum += it
if isinstance(it, list):
sum += cycle(it)
if isinstance(it, tuple):
sum += cycle(it)
return sum
s = eval(input())
print(cycle(s))
7-5 sdut-验证“哥德巴赫猜想”
著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。
输入格式:
在一行中,给出一个(2, 2 000 000 000]范围内的偶数N。
输出格式:
在一行中,按照格式“N=p+q”输出N的素数分解,其中p ≤ q均为素数。又因为这样的分解不唯一(例如:24还可以分解为7+17),要求必须输出所有解中p最小的解。
输入样例:
24
输出样例:
24=5+19
代码:
def prime(p):
if p == 0 or p == 1:
return False
for i in range(2, int(p ** 0.5) + 1):
if p % i == 0:
return False
return True
n = int(input())
for i in range(2, n):
if prime(i) and prime(n - i):
print("%d=%d+%d" % (n, i, n - i))
exit()
7-6 sdut-学生互助组队
“一对一学习互助小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。
请你编写程序帮助老师完成这个分配工作,即:在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。
输入格式:
第一行给出正偶数N(≤50),即全班学生的人数。
此后N行,按照名次从高到低的顺序给出每个学生的性别(0代表女生,1代表男生)和姓名(不超过8个英文字母的非空字符串),以1个空格分隔。
这里保证本班男女比例是1:1,并且没有并列名次。
输出格式:
每行输出一组两个学生的姓名,其间以1个空格分隔。
名次高的学生在前,名次低的学生在后。
小组的输出顺序按照前面学生的名次从高到低排列。
输入样例:
8
0 Amy
1 Tom
1 Bill
0 Cindy
0 Maya
1 John
1 Jack
0 Linda
输出样例:
Amy Jack
Tom Linda
Bill Maya
Cindy John
代码:
ls_w, ls_m, ls = [], [], []
n = int(input())
for i in range(n):
id, name = input().split()
if id == '0':
ls_w.append(name)
else:
ls_m.insert(0, name)
ls.append(name)
dic1, dic2 = dict(zip(ls_w, ls_m)), dict(zip(ls_m, ls_w))
for i in range(len(ls) // 2):
if ls[i] in dic1.keys():
print(ls[i], dic1[ls[i]])
else:
print(ls[i], dic2[ls[i]])
7-7 sdut-求指定层的元素个数
输入一个嵌套列表,再输入层数,求该层的元素个数。
输入格式:
第一行输入列表,第二行输入层数。
输出格式:
在一行中输出元素个数。
输入样例:
[1,2,[3,4,[5,6],7],8]
3
输出样例:
2
代码:
dic = {}
s = eval(input())
n = int(input())
def cycle(s, n):
for it in s:
dic[n] = dic.get(n, 0) + 1
if isinstance(it, list):
cycle(it, n + 1)
cycle(s, 1)
print(dic.get(n, 0))
因为这学期刚学Python,就当是做个笔记了,代码虽然都能过,但可能不是特别好,有不当的地方欢迎指正,感谢大家的耐心阅读
212丨acc丨2022.11.18