7-1 统计数字
输入一个字符串,统计其中数字字符的个数。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试输入一个仅由字母和数字组成的字符串(长度不超过80)。
输出格式:
对于每组测试,在一行上输出该字符串中数字字符的个数。
输入样例:
2
ac520ac520
a1c2m3sdf
输出样例:
6
3
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
n=int(input())
sum=0
while n:
sum=0
n-=1
m=input()
for i in m:
if i.isdigit():
sum+=1
print(sum)
#方法二
n=int(input())
for i in range(n):
print(sum([1 for i in input() if i.isdigit() ]))
7-2 sdut-求满足条件的斐波那契数
斐波那契数,亦称之为斐波那契数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……,这个数列从第3项开始,每一项都等于前两项之和。求大于输入数的最小斐波那契数。
输入格式:
在一行输人一个正整数n(n>=10)。
输出格式:
在一行输出大于n的最小斐波那契数。
输入样例:
10
输出样例:
13
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
n = int(input())
s1 = s2 = s3 = 1
while True:
s1 = s2
s2 = s3
s3 = s1 + s2
if s3 > n:
break
print(s3)
#方法二
n=int(input())
a,b,c=1,1,0
while c<n:
c=a+b
a=b
b=c
print(c)
7-3 平均值
在一行上输入若干整数,每个整数以一个空格分开,求这些整数的平均值。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试输入一个字符串(仅包含数字字符和空格)。
输出格式:
对于每组测试,输出以空格分隔的所有整数的平均值,结果保留一位小数。
输入样例:
1
1 2 3 4 5 6 7 8 9 10
输出样例:
5.5
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
n = int(input())
for i in range(n):
sum = 0
m = 0
str1 = input().split()
for i in str1:
sum += float(i)
m += 1
print("%.1f" % (sum / m))
#方法二
n=int(input())
for i in range(n):
s=input().split()
print(sum(map(int,s))/len(s))
7-4 最小回文数
若一个数正向看和反向看等价,则称做回文数。例如:6,2552,12321均是回文数。
给出一个正整数n,求比n大的最小的回文数。(n和运算结果均不会超出int类型范围)
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试输入1个正整数n。
输出格式:
对于每组测试数据,输出比n大的最小回文数。
输入样例:
2
12
123456
输出样例:
22
124421
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
n= int(input())
for i in range(n):
m=int(input())
for l in range(m+1,m*2+1):
ty1=1
str1=str(l)
for o in range(len(str1)//2):
if str1[o]!=str1[len(str1)-o-1]:
ty1=0
break
if ty1:
print(l)
break
#方法二
n=int(input())
for i in range(n):
s=str(int(input())+1)
while s[:]!=s[::-1]:
s=str(int(s)+1)
print(int(s))
7-5 计算 1+2+3+…+m
输入一个正整数m(0<=m<=100),计算 1+2+3+…+m 的值。
输入格式:
多组输入。
在一行输入一个正整数m。
输出格式:
对应每一行输入,在一行中按照格式“sum=S”输出对应的和S.
输入样例:
10
100
输出样例:
在这里给出相应的输出。例如:
sum=55
sum=5050
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
try:
while True:
sum = 0
n = int(input())
for i in range(1, n + 1):
sum += i
print("sum=%d" % sum)
except EOFError:
pass
#方法二
while True:
try:
m=int(input())
print('sum={}'.format(int(m*(1+m)/2)))
except:
break
7-6 sdut-循环-乘法运算
接收一个正整数N,然后打印输出:N个等式,形如:i(1->N)N=iN 格式的数据。
输入格式:
只有一个正整数N(N<=100)。
输出格式:
输出共N行数据,形式如:i (1->N)*N=? 格式的表达式。
输入样例1:
4
输出样例1:
1*4=4
2*4=8
3*4=12
4*4=16
输入样例2:
5
输出样例2:
1*5=5
2*5=10
3*5=15
4*5=20
5*5=25
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
n = int(input())
for i in range(1, n + 1):
print("%d*%d=%d" % (i, n, i * n))
#方法二
n=int(input())
for i in range(n):
print("{}*{}={}".format(i+1,n,n*(i+1)))
7-7 sdut-入门-7 A+B for Input-Output Practice (VII)
你的任务是计算a + b。
输入格式:
输入将由一系列整数a和b组成,用一个空格分隔,每行有一对整数。
输出格式:
对于每一对输入整数a和b,应该输出a和b的和,后面跟着一个空行。
输入样例:
在这里给出一组输入。例如:
1 5
10 20
输出样例:
在这里给出相应的输出。例如:
6
30
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
try:
while True:
n,m=map(int,input().split())
print("%d\n"%(n+m))
except EOFError:
pass
#方法二
while True:
try:
m,n=map(int,input().split())
print(m+n,end='\n\n')
except:
break
7-8 三七二十一
某天,诺诺看到三七二十一(3721)数,觉得很神奇,这种数除以3余2,而除以7则余1。例如8是一个3721数,因为8除以3余2,8除以7余1。现在给出两个整数a、b,求区间[a,b]中的所有3721数,若区间内不存在3721数则输出“none”。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试输入两个整数a,b(1≤a<b<2000)。
输出格式:
对于每组测试,在一行上输出区间[a,b]中所有的3721数,每两个数据之间留一个空格。如果给定区间不存3721数,则输出“none”(引号不必输出)。
输入样例:
2
1 7
1 100
输出样例:
none
8 29 50 71 92
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
n = int(input())
for i in range(n):
sum = 0
m1, m2 = map(int, input().split())
for i in range(m1, m2 + 1):
if i % 3 == 2 and i % 7 == 1:
if sum >= 1:
print(" %d" % i, end='')
else:
print(i, end='')
sum += 1
if sum == 0:
print("none")
else:
print()
#方法二
n=int(input())
for i in range(n):
a,b=map(int,input().split())
lst=[j for j in range(a,b+1) if j%3==2 and j%7==1]
if lst:
print(*lst)
else:
print("none")
7-9 三七二十一
输入一个整数n,输出2n-1行构成的菱形,例如,n=5时的菱形如输出样例所示。
输入格式:
测试数据有多组,处理到文件尾。每组测试输入一个整数n(3≤n≤20)。
输出格式:
对于每组测试数据,输出一个共2n-1行的菱形,具体参看输出样例。
输入样例:
5
输出样例:
*
***
*****
*******
*********
*******
*****
***
*
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
try:
while True:
n=int(input())
for i in range(1,n+1):
for q in range(n-i):
print(" ",end='')
for q in range(i*2-1):
print("*",end='')
print()
for i in range(n-1,0,-1):
for q in range(n-i):
print(" ",end='')
for q in range(i*2-1):
print("*",end='')
print()
except EOFError:
pass
#方法二
while True:
try:
n = int(input())
for i in range(n):
print(" "*(n-i-1)+"*"*(2*i+1))
for i in range(n-2, -1, -1):
print(" "*(n-i-1)+"*"*(2*i+1))
except:
break
7-10 三七二十一
输入一个列表,删除其中的重复值,再输出。
要求
假设列表中存在k个值为a的元素,删除前k-1个元素,保留最后一个。
不同元素在列表中的相对位置不应被改变。
输入格式:
[元素1, 元素2, … , 元素n]
输出格式:
[元素1,元素2, … , 元素k]
输入样例:
[4,3,2,3,2,4,True]
输出样例:
[3, 2, 4, True]
提示:将形如"[1,3,5]"的字符串转换成列表可以使用eval()函数。
注意:不要在遍历列表的同时对列表进行增删改操作,这样会引起混乱,导致不正确的结果!
注意,输出格式应与输出样例一致,涉及空格,逗号等。
请接着往下看:你的程序真的对了吗?
多数读者的解题思路是制造一个v列表的复制品以避免在遍历v的同时删除v中的元素。该解决方案可以通过本题设置的全部测试。但这并不意味着该解决方案是“完全正确”的。请尝试下述输入:
[1,7,6,7,7,True,'a',9.8,'a',True]
很遗憾,程序将产生错误的输出:
[6, 7, 9.8, 'a', True]
产生这种意外结果的原因是:在Python里1和True是相等的! 0和False也是相等的! 在使用列表的count()函数,index()函数,remove()函数时,1和True, 0和False被不加区分地对待。
下述代码的执行结果证实了这一点:
v = [1,True,2,True,0,False]
print("count of 1:", v.count(1), ",count of True:", v.count(True))
print("count of 0:", v.count(0), ",count of False:", v.count(False))
print("index of True:",v.index(True), ",index of False",v.index(False))
v.remove(True)
print("after v.remove(True):",v)
其执行结果为:
count of 1: 3 ,count of True: 3 #1,True都同时为1或True
count of 0: 2 ,count of False: 2 #0,False都同时为0或False
index of True: 0 ,index of False 4 #下标0的1被视为True
after v.remove(True): [True, 2, True, 0, False] #1被当作True移除了
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
参考答案
#方法一
list1 = eval(input())
list1.reverse()
list2 = ['']
for i in list1:
if i not in list2:
list2.insert(0, i)
list2.pop()
print(list2)
#方法二
li = eval(input())
re = []
for item in li[::-1]:
if item not in re:
re.append(item)
print(re[::-1])