6-1 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
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
def fib(n): # 函数1
fibn = [1, 1]
for i in range(2, n + 1):
fib1 = fibn[i - 1] + fibn[i - 2]
fibn.append(int(fib1))
return fibn[n]
def fibs(a, b): # 函数2
i = 0
sum_fib = []
while True:
if a <= fib(i) <= b:
sum_fib.append(int(fib(i)))
elif fib(i) > b:
break
i += 1
return sum_fib
#方法二
def fib(n):
f0,f1 = 1, 1
if n<2:
return f0
else:
fn=fib(n-1)+fib(n-2)
return fn
def fibs(m,n):
s = []
i = 0
while True:
fn = fib(i)
if n>=fn>=m:
s.append(fn)
elif fn > n:
break
i+=1
return s
6-2 根据三角形三边长求面积,不能合法构成三角形则抛出异常
下述程序从键盘读入三角形的三边长(小数),然后使用海伦公式计算三角形的面积。如果输入的三边长可以构成合法的三角形,输出计算得到的三角形面积,否则输出"无法构成合法三角形"。
请将下述程序补充完整,请注意该程序中的错误输出依赖于Python的异常处理机制。
函数接口定义:
请将代码补全,完成相应的功能。
此处缺失的代码不是一个函数。
裁判测试程序样例:
from math import sqrt
def Area(a,b,c):
p=(a+b+c)/2
s=sqrt(p*(p-a)*(p-b)*(p-c))
return s
ans=0
a = float(input())
b = float(input())
c = float(input())
#在此处补全代码
#try ....
#...
#...
except ValueError:
print("无法构成合法三角形")
else:
print("%.2f" % ans)
输入样例:
3
3.1
10.8
输出样例:
无法构成合法三角形
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
try:
p = (a + b + c) * 0.5
c = (p * (p - a) * (p - b) * (p - c))
ans = pow(c, 0.5)
ans = str(ans)
ans = float(ans)
#方法二
try:
ans=Area(a,b,c)
7-1 sdut-查字典
遇到单词不认识怎么办? 查字典啊!
已知字典中有n个单词,现有m个不认识的单词,询问这m个单词是否出现在字典中,如果在字典中就输出其含义,如果不在字典中,就输出:Not found!
输入格式:
含有多组测试用例。
第一行输入n,m (n>=0&&n<=100000&&m>=0&&m<=100000)分别是字典中存在的n个单词,和要查询的m个单词.
紧跟着n行,代表字典中存在的单词及其解释(含义);
然后m行,要查询的m个单词。
若n=0&&m=0 程序结束
输出格式:
对于待查询的单词,若在字典中存在则输出其解释(含义),不存在输出Not found!
输入样例:
3 2
red: having the colour of blood or fire
green:having the colour of grass or the leaves of most plants and trees
blue:having the colour of a clear sky or the sea/ocean on a clear day
blue
abcded
0 0
输出样例:
having the colour of a clear sky or the sea/ocean on a clear day
Not found!
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
while True:
n, m = map(int, input().split())
if n == 0 and m == 0:
break
dic = {}
for i in range(n):
d1, d2 = input().split(':')
dic[d1] = d2
for i in range(m):
word = input()
if word in dic:
print(dic[word])
else:
print('Not found!')
#方法二
while True:
try:
n, m = map(int, input().split())
dct = {}
ls=[]
for i in range(n):
value, key = input().split(":")
dct[value]=key
for i in range(m):
ls.append(input())
for i in range(m):
if dct.get(ls[i],0) != 0:
print(dct[ls[i]])
else:
print("Not found!")
except:
break
7-2 集合添加元素
向集合中加入单一元素,可以使用.add() 方法操作,该操作将向集合中加入。
应用你的知识帮助你的好朋友小明,小明喜欢集邮,他有大量的来自不同国家的邮票,他决定数一下他的集邮册中共有来自多少个不同国家的邮票,他请你帮忙,你一个一个的把N张邮票拿出来,找出共有多少个不重复的国家。
输入格式:
第一行输入一个整数N,表示所有邮票的数目
接下来的N行,每行输入一张邮票来自哪一个国家的名字
输出格式:
在一行中输出不重复的国家的数量。
输入样例:
7
UK
China
USA
France
New Zealand
UK
France
输出样例:
5
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
n = int(input())
m = input()
list1 = {m}
for i in range(n - 1):
list1.add(input())
print(len(list1))
#方法二
n=int(input())
s=set()
for i in range(n):
s.add(input())
print(len(s))
7-3 集合应用–列表
集合是一个无序的、没有重复元素的数据类型,在输出或转为序列类型时,其元素位置随机出现。
李白是一个社区大学的老师,一天,他让学生小明计算一下温室里植物的平均高度。
平均高度 = 不同高度的和 / 不同高度的数量
输入格式:
输入N 个用空格分隔的植物的高度
输出格式:
在一行内输出植物的平均高度,保留小数点后3位
输入样例:
161 182 161 154 176 170 167 171 170 174
输出样例:
169.375
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
lis1 = list(map(int, input().split()))
lis2 = list(set(lis1))
print("%.3f" % (sum(lis2) / len(lis2)))
#方法二
ls=set(map(int,input().split()))
print("{:.3f}".format(sum(ls)/len(ls)))
7-4 字典查询1–查询省会
总理有诗云:两湖两广两河山,五江云贵福吉安,四西二宁青甘陕,还有内台北上天。
中国各省、直辖市、自治区和特别行政区的字典数据如下:
capitals = {‘湖南’:‘长沙’,‘湖北’:‘武汉’,‘广东’:‘广州’,‘广西’:‘南宁’,‘河北’:‘石家庄’,‘河南’:‘郑州’,‘山东’:‘济南’,‘山西’:‘太原’,‘江苏’:‘南京’,‘浙江’:‘杭州’,‘江西’:‘南昌’,‘黑龙江’:‘哈尔滨’,‘新疆’:‘乌鲁木齐’,‘云南’:‘昆明’,‘贵州’:‘贵阳’,‘福建’:‘福州’,‘吉林’:‘长春’,‘安徽’:‘合肥’,‘四川’:‘成都’,‘西藏’:‘拉萨’,‘宁夏’:‘银川’,‘辽宁’:‘沈阳’,‘青海’:‘西宁’,‘海南’:‘海口’,‘甘肃’:‘兰州’,‘陕西’:‘西安’,‘内蒙古’:‘呼和浩特’,‘台湾’:‘台北’,‘北京’:‘北京’,‘上海’:‘上海’,‘天津’:‘天津’,‘重庆’:‘重庆’,‘香港’:‘香港’,‘澳门’:‘澳门’}
设计程序,接收用户输入的省、直辖市、自治区和特别行政区名称,输出对应的省会名称,当输入错误时输出“输入错误”。
输入格式:
第一行输入一个整数n
接下来输入n行,每行输入一个省、直辖市、自治区或特别行政区名称
输出格式:
输出对应的省会名称
输入样例1:
2
新疆
北京
输出样例1:
乌鲁木齐
北京
输入样例1:
1
美国
输出样例1:
输入错误
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
capitals = {'湖南': '长沙', '湖北': '武汉', '广东': '广州', '广西': '南宁', '河北': '石家庄', '河南': '郑州', '山东': '济南', '山西': '太原', '江苏': '南京',
'浙江': '杭州', '江西': '南昌', '黑龙江': '哈尔滨', '新疆': '乌鲁木齐', '云南': '昆明', '贵州': '贵阳', '福建': '福州', '吉林': '长春',
'安徽': '合肥', '四川': '成都', '西藏': '拉萨', '宁夏': '银川', '辽宁': '沈阳', '青海': '西宁', '海南': '海口', '甘肃': '兰州', '陕西': '西安',
'内蒙古': '呼和浩特', '台湾': '台北', '北京': '北京', '上海': '上海', '天津': '天津', '重庆': '重庆', '香港': '香港', '澳门': '澳门'}
n = int(input())
for i in range(n):
m = input()
if m in capitals:
print(capitals[m])
else:
print("输入错误")
#方法二
capitals = {'湖南':'长沙','湖北':'武汉','广东':'广州','广西':'南宁','河北':'石家庄','河南':'郑州','山东':'济南','山西':'太原','江苏':'南京','浙江':'杭州','江西':'南昌','黑龙江':'哈尔滨','新疆':'乌鲁木齐','云南':'昆明','贵州':'贵阳','福建':'福州','吉林':'长春','安徽':'合肥','四川':'成都','西藏':'拉萨','宁夏':'银川','辽宁':'沈阳','青海':'西宁','海南':'海口','甘肃':'兰州','陕西':'西安','内蒙古':'呼和浩特','台湾':'台北','北京':'北京','上海':'上海','天津':'天津','重庆':'重庆','香港':'香港','澳门':'澳门'}
n=int(input())
for i in range(n):
s=input()
if capitals.get(s,0)!=0:
print(capitals[s])
else:
print("输入错误")
7-5 字典应用–用户登录
有字典如下:
dic = {‘admin’:‘123456’,‘administrator’:‘12345678’,‘root’:‘password’}
实现用户输入用户名和密码,当用户名与密码和字典中的键值对匹配时,显示“登录成功”,否则显示“登录失败”,登录失败时允许重复输入三次。
输入格式:
在两行中分别输入用户名和密码
输出格式:
“登录成功"或"登录失败”
输入样例:
admin
12345678
admin
123456
输出样例:
登录失败
登录成功
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
dic = {'admin': '123456', 'administrator': '12345678', 'root': 'password'}
def chance(m, n):
global dic
if m not in dic: # 判断是否输入错误账号
return 0
if dic[m] == n:
return 1
return 0
n = input()
m = input()
if chance(n, m):
print('登录成功')
else:
print('登录失败')
for i in range(2):
n = input()
m = input()
if chance(n, m):
print('登录成功')
break
else:
print('登录失败')
#方法二
dic = {'admin':'123456','administrator':'12345678','root':'password'}
for i in range(3):
name,password=input(),input()
if dic.get(name,0) == password:
print('登录成功')
break
else:
print('登录失败')
7-6 列表操作
输入一个1-100之间的正整数 n, 以 n 为随机数种子随机生成一个不大于 n 的正整数 m 。 生成一个包含元素为 1,2,3……n 的列表 ls,在列表 ls 中删除值为 m 的整数倍的元素,在两行中输出原始列表和删除 m 倍数后的列表。
输入格式:
输入一个1-100之间的正整数 n
输出格式:
两行,每行一个列表
输入样例:
在这里给出一组输入。例如:
20
输出样例:
在这里给出相应的输出。例如:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
[1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 16, 17, 18, 19]
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
import random
n = int(input())
ls = []
for i in range(1, n + 1):
ls.append(i)
print(ls)
random.seed(n)
m = random.randint(1, n)
i = 1
while True:
if m * i > n:
break
else:
if m * i in ls:
ls.remove(m * i)
i += 1
print(ls)
#方法二
import random
n = int(input())
l = [i+1 for i in range(n)]
print(l)
random.seed(n)
m = random.randint(1,n+1)
print([i for i in l if i % m != 0])
7-7 奇特的四位数
一个四位数,各位数字互不相同,所有数字之和等于6,并且这个数是11的倍数。
满足这种要求的四位数有多少个?各是什么?
输入格式:
该题目没有输入
输出格式:
第一行输出符合条件的数字个数
第二行以列表形式输出所有满足条件的四位数,列表元素按由小到大顺序排列
输入样例:
在这里给出一组输入。例如:
输出样例:
在这里给出相应的输出。例如:
6
[1023, 1320, 2013, 2310, 3102, 3201]
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
ls = []
for i in range(1000, 10000):
if sum(list(map(int, str(i)))) == 6 and i % 11 == 0 and len(list(set(list(map(int, str(i))))))==4:
ls.append(i)
print(len(ls))
print(ls)
#方法二
ans=[i for i in range(1000,10000) if sum(map(int,str(i)))==6 and len(set(str(i)))==4 and i % 11 == 0]
print(len(ans))
print(ans)
7-8 打印友好数
kekao 定义了一种数,叫做友好数。
对于友好数的定义是这样的:“对于一个正整数a,若a的每位数字加和为偶数,则a是一个友好数”。
已知区间l, r,求区间内所有的友好数。
输入格式:
输入两个正整数l,r 输入数据保证1<l<r<10^6
输出格式:
输出区间[l,r]中所有的友好数,友好数中间以空格间隔,若不存在友好数,输出0
输入样例:
在这里给出一组输入。例如:
3 5
输出样例:
在这里给出相应的输出。例如:
4
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
a, b = map(int, input().split())
ls = []
for i in range(a, b + 1):
if sum(list(map(int, str(i)))) % 2 == 0:
ls.append(i)
if len(ls) == 0:
print('0')
else:
for i in range(len(ls) - 1):
print(ls[i], end=' ')
print(ls[len(ls) - 1], end='')
#方法二
a,b=map(int,input().split())
ls=[i for i in range(a,b+1) if sum(map(int,str(i)))%2==0]
if ls:
print(*ls)
else:
print(0)