6-1 python函数-组合数
请编写函数完成:从n个元素中取出m个元素的组合数:参考公式
。
输入要求:n和m均为正整数;如果输入非法数据请参照下方输入输出样例的警告信息;
函数接口定义:
定义两个函数,函数名及参数要求如下:
Fun_Fact(x) #定义阶乘函数,对x求阶乘
Fun_Comb ( m, n) #调用阶乘函数,使用题目公式,再设计函数计算组合数
其中'x' 、'n' 和 'm'都是用户传入的参数。x、 n和m 的值均为正整数;且 n>=m;第二个函数Fun_Comb ( n, m ) 须返回组合数个数。
裁判测试程序样例:
/* 请在这里填写答案 */
a,b = input().split(',')
if a.isdecimal() and b.isdecimal() and (int(a)<=int(b)):
Comb_Result = Fun_Comb(int(a), int(b))
print("result={:.2f}".format(Comb_Result))
else:
print("Error data,please input again!")
输入样例1:
2,7
输出样例1:
result=21.00
输入样例2:
4,-10
输出样例2:
Error data,please input again!
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
def Fun_Fact(x):
sum = 1
for i in range(1, x + 1):
sum *= i
return sum
def Fun_Comb(m, n):
sum = Fun_Fact(n) / (Fun_Fact(m) * Fun_Fact(n - m))
return sum
#方法二
def Fun_Fact(x):
if x==0 or x==1:
return 1
else:
return x*Fun_Fact(x-1)
def Fun_Comb (m,n):
return Fun_Fact(n)/Fun_Fact(m)/Fun_Fact(n-m)
6-2 写函数判断质数
实现一个函数,判断参数是否是质数,是的话返回True,否则返回False
函数接口定义:
def isPrime(num);
参数num表示要判断的正整数。返回值为True表示是质数,返回False表示不是质数。
裁判测试程序样例:
/* 请在这里填写答案 */
num=eval(input())
if isPrime(num):
print ('yes')
else:
print ('no')
输入样例:
97
输出样例:
yes
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
def isPrime(num):
if num == 1 or num == 0:
return False
elif num == 2:
return True
else:
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
return False
return True
#方法二
def isPrime(num):
if num==1:
return False
elif 0 in [0 for i in range(2,int(pow(num,0.5))+1) if num%i==0]:
return False
else:
return True
6-3 编写函数统计指定数字的个数
6-3 编写函数统计指定数字的个数
CountDigit(number,digit )
其中number是整数,digit为[1, 9]区间内的整数。函数CountDigit应返回number中digit出现的次数。
函数接口定义:
函数接口定义:
int CountDigit (number, digit );
参数number是整数,参数digit为[1,9]区间的整数,函数返回number中digit出现的次数。
裁判测试程序样例:
/* 请在这里填写答案 */
number,digit = list(map(int,input().split()))
cnt = CountDigit(number,digit)
print ("Number of digit {0} in {1}: {2}".format(digit,number,cnt))
输入样例:
-21252 2
输出样例:
Number of digit 2 in -21252: 3
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
def CountDigit(number, digit):
n = str(digit)
return str(number).count(n)
#方法二
def CountDigit(number,dight):
nums=str(number)
cnt=nums.count(str(dight))
return cnt
6-4 修改句子
本题参考checkio.org
读入一个英文句子,将此句子的第一个字母改为大写字母,并在最后加上句号'.'
注意:读入的句子有可能本来就符和要求。
函数接口定义:
def fun(sentence):
裁判测试程序样例:
/* 请在这里填写答案 */
doc = input()
res = fun(doc)
print(res)
输入样例1:
在这里给出一组输入。例如:
hello, world
输出样例1:
在这里给出相应的输出。例如:
Hello, world.
输入样例2:
在这里给出一组输入。例如:
Hello, world.
输出样例2:
在这里给出相应的输出。例如:
Hello, world.
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
def fun(sentence: str):
str1 = sentence.capitalize()
if sentence[len(sentence) - 1] != '.':
str1=str1+'.'
return str1
#方法二
def fun(sentence):
if sentence[-1]==".":
return sentence.capitalize()
else:
return sentence.capitalize()+"."
6-5 整数数位和
编写一个函数,该函数接受一个正整数作为参数,返回该整数的各位数字之和。
函数接口定义:
def digitSum(v)
v为输入整数(正整数);
函数返回一个整数,其值为v的各位数字之和。
裁判测试程序样例:
a = int(input())
print(digitSum(a))
输入样例:
291
输出样例:
12
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
def digitSum(v):
sum=0
for i in str(v):
sum += int(i)
return sum
#方法二
def digitSum(v):
return sum(map(int,str(v)))
7-1 计算各对应位乘积之和
读入两个整数a和b,输出绝对值a和绝对值b的各对应位乘积之和,如a=1234,b=608,则输出值为:“1×0+2×6+3×0+4×8“的值,即44。
输入格式:
在一行中输入两个数
输出格式:
在一行中输出对应位乘积之和
输入样例:
在这里给出一组输入。例如:
1234 608
输出样例:
在这里给出相应的输出。例如:
44
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
n,m=map(int, input().split())
n,m=str(abs(n)),str(abs(m))
long=max(len(n),len(m))
sum=0
while len(n) < long:
n='0'+n
while len(m) < long:
m='0'+m
for i in range(long):
sum+=int(n[i])*int(m[i])
print(sum)
#方法二
a,b=input().split()
a=str(abs(int(a)))
b=str(abs(int(b)))
if len(a)-len(b)>0:
b="0"*(len(a)-len(b))+b
else:
a="0"*(len(b)-len(a))+a
print(sum([int(a[i])*int(b[i]) for i in range(len(a))]))
7-2 缩写期刊名
科研工作者经常要向不同的期刊投稿。但不同期刊的参考文献的格式往往各不相同。有些期刊要求参考文献所发表的期刊名必须采用缩写形式,否则直接拒稿。现对于给定的期刊名,要求按以下规则缩写:
(1)长度不超过4的单词不必缩写;
(2)长度超过4的单词仅取前4个字母,但其后要加“.”;
(3)所有字母都小写。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。
每组测试输入一个包含大小写字母和空格的字符串(长度不超过85),单词由若干字母构成,单词之间以一个空格间隔。
输出格式:
对于每组测试,在一行上输出缩写后的结果,单词之间以一个空格间隔。
输入样例:
2
Ad Hoc Networks
IEEE Transactions on Nanotechnology
输出样例:
ad hoc netw.
ieee tran. on nano.
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
n = int(input())
for t in range(n):
l1 = input().split()
for i in range(len(l1)):
if len(l1[i]) > 4:
print(l1[i][:4].lower(), end='.')
else:
print(l1[i].lower(), end='')
if i < len(l1) - 1:
print(" ", end='')
print()
l1.clear()
#方法二
n=int(input())
for i in range(n):
lst=input().split()
for i in range(len(lst)):
x=lst[i].lower()
if len(x)>4:
lst[i]=x[:4]+"."
else:
lst[i]=x
print(*lst)
7-3 小者靠前
输入n(1<n<100)个整数到一个数组中,使得其中最小的一个数成为数组的第一个元素(首元素)。若有多个最小者,则首元素仅与最早出现的最小者交换。
输入格式:
测试数据有多组,处理到文件尾。每组测试数据的第一行输入n(1<n<100),第二行输入n个整数。
输出格式:
对于每组测试,输出将这n个整数中最小的数与第一个数对换后的n个整数。
输入样例:
5
5 3 4 1 2
输出样例:
1 3 4 5 2
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
try:
while True:
n = int(input())
list1 = [eval(i) for i in input().split()]
min1 = min(list1)
for i in range(n):
if min1 == list1[i]:
list1[i] = list1[0]
break
list1[0] = min1
print(' '.join(str(i) for i in list1))
except EOFError:
pass
#方法二
while True:
try:
n=input()
lst=list(map(int,input().split()))
a=lst[0]
n=lst.index(min(lst))
b=lst[n]
lst[n],lst[0]=a,b
print(*lst)
except:
break
7-4 Python-任意多行字符串拆分数值求和
编写程序,统计每行字符串中若干整数的和。每行字符串中整数间的分隔符可能有逗号“,”、分号“ ;”和空格,有多少行就求多少行。
输入格式:
任意输入若干行由整数构成的字符串(回车换行),整数间以逗号或空格或分号分隔。测试数确保至少有一行数据,字符串中的整数数据均合法有效。最后以一个回车结束输入。
输出格式:
对应输出原输入串(一行中的字符序列),冒号后输出各个整数之和。
输入样例:
1; 2 ,3
2 3; 4
10,20 30; 40
9
输出样例:
1; 2 ,3:6
2 3; 4:9
10,20 30; 40:100
9:9
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
try:
while True:
s1=input()
s2=''
for i in s1:
if i.isdigit():
s2+=i
else:
s2+=' '
l1=list(map(int,s2.split()))
print("%s:%s"%(s1,sum(l1)))
except EOFError:
pass
#方法二
while True:
try:
x=input()
lst=x.replace(","," ").replace(":"," ").replace(";"," ").split()
print(x+":"+str(sum(map(int,lst))))
except:
break
7-5 武林盟主
在传说中的江湖中,各大帮派要选武林盟主了,如果龙飞能得到超过一半的帮派的支持就可以当选,而每个帮派的结果又是由该帮派帮众投票产生的,如果某个帮派超过一半的帮众支持龙飞,则他将赢得该帮派的支持。现在给出每个帮派的帮众人数,请问龙飞至少需要赢得多少人的支持才可能当选武林盟主?
输入格式:
测试数据有多组,处理到文件尾。每组测试先输入一个整数n(1≤n≤20),表示帮派数,然后输入n个正整数,表示每个帮派的帮众人数ai(0<ai≤100)。
输出格式:
对于每组数据输出一行,表示龙飞当选武林盟主至少需要赢得支持的帮众人数。
输入样例:
3 5 7 5
4 6 6 7 5
输出样例:
6
11
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
try:
while True:
list1 = list(map(int, input().split()))
list2 = []
for i in range(1, list1[0] + 1):
list2.append(list1[i] // 2 + 1)
while len(list2) > list1[0] // 2 + 1:
list2.remove(max(list2))
print(sum(list2))
except EOFError:
pass
#方法二
while True:
try:
x=list(map(int,input().split()))
lst=sorted(x[1:])
l=len(lst)//2+1
print(sum([i//2+1 for i in lst[:l]]))
except:
break