1.计算n!
从键盘输入一个正整数n,输出n!的值。
输入样例1:
3
输出样例1:
3! = 6
代码:
def dfs(n):
if n == 1:
return 1
return n * dfs(n-1)
n = int(input())
print('%d! = %d' % (n, dfs(n)))
2.寻找不一样的约数
【题目描述】
输入两个数n与m,寻找n和m之间不同的约数,并按不同约数的大小从大到小进行排序输出。
例如8的约数有1,2,4,8。9的约数有1,3,9,所以不同的约数是2、3、4、8、9。
【输入描述】
两个正整数n和m,中间以空格隔开。
【输出描述】
输出不同的约数,数据间以逗号进行分隔。,若没有不同约数,则输出“not found”。
【输入样例1】
8 9
【输出样例1】
2,3,4,8,9
【输入样例2】
4 16
【输出样例2】
8,16
【输入样例3】
5 5
【输出样例3】
not found
代码:
n, m = map(int,input().split())
ans = []
for i in range(1, max(n,m) + 1):
if n % i == 0 and m % i or n % i and m % i == 0:
ans.append(i)
ans.sort()
if len(ans) == 0:
print('not found')
else:
for i in range(len(ans)):
if not i:
print(ans[i], end = '')
else:
print(',%d' % ans[i], end = '')
3.列表下标转换
【题目描述】
从键盘输入一个字符串,保证字符串中的元素仅由英文单词构成(单词之间用英文逗号隔开)。请你先对字符串中的元素进行排序(仅排序,不要改变原本的字符串),然后将字符串中的每个元素替换为它们排序后的序号。请将替换后的字符串以列表的形式输出。
【详细解释】序号代表了一个元素有多大。序号编号的规则如下:
1、序号从 1 开始编号;
2、一个元素越大,那么序号越大;
3、果两个元素相等,那么它们的序号相同;
4、英文字母按照首字母的大小进行排序,如果首字母相同,则按第二个字母进行排序,依次类推;
【输入描述】
一行英文单词,单词之间用逗号隔开。
【输出描述】
一个列表。
【输入样例1】
a,a,a
【输出样例1】
[1,1,1]
【输入样例2】
a,a,h,b,c,e,d,f,ab,dd,c,f
【输出样例2】
[1,1,9,3,4,7,5,8,2,6,4,8]
代码:
s = input().split(',')
a = s[::]
a.sort()
ans, id, cnt = [], {}, 1
for i in range(len(a)):
if not i or a[i] == a[i - 1]:
id[a[i]] = cnt
else:
cnt += 1
id[a[i]] = cnt
for i in range(len(s)):
if s[i] != ',':
ans.append(id[s[i]])
print('[%d' % ans[0], end = '')
for i in range(1,len(ans)):
print(',%d' % ans[i], end = '')
print(']')
4.寻找最佳组合
Description【题目描述】
输入一个正整数n,以及n个元素,寻求这些元素中能由1-3个元素相加等于9的组合。
Input【输入要求】
一个正整数n,以及n个元素,用逗号隔开。
Output【输出要求】
一个列表,包含0或多个组合,每个组合最多有3个元素,【注】:若当前元素值为9,则不参与其他与0排列的组合,最终按组合元素的长度排序输出,若长度一样,按原始列表出现位置排序,详见样例2,列表中有9有0,因为9已经添加到新列表中,所以不再考虑其他和0的任何组合。
Sample Input 1
6
3,6,10,14,2,7
Sample Output 1
[[3, 6], [2, 7]]
Sample Input 2
9
9,0,2,2,4,7,6,9,2
Sample Output 2
[[9], [9], [2, 7], [2, 7], [7, 2], [0, 2, 7], [0, 2, 7], [0, 7, 2]]
Sample Input 3
9
9,0,2,2,3,7,6,9,9
Sample Output 3
[[9], [9], [9], [2, 7], [2, 7], [3, 6], [0, 2, 7], [0, 2, 7], [0, 3,
6]]
代码:
n = int(input())
a = list(map(int, input().split(',')))
ans = []
for i in range(len(a)):
if a[i] == 9:
ans.append([9])
else:
for j in range(i+1, len(a)):
if a[i] + a[j] == 9 and a[i] and a[j]:
ans.append([a[i], a[j]])
else:
for k in range(j+1, len(a)):
if a[i] + a[j] + a[k] == 9:
ans.append([a[i], a[j], a[k]])
ans=sorted(ans,key=lambda x:len(x))
print(ans)
5.循环数数
Description
数字197可以被称为循环素数,因为197的三个数位循环移位后的数字:197,971,719均为素数。100以内这样的数字包括13个,2,3,5,7,11,13,17,31,37,71,73,79,97。要求任意正整数n以内一共有多少个这样的循环素数。
Input
共一行,为一个正整数n。
Output
n以内循环素数的值。
Sample Input 1
100
Sample Output 1
13
代码:
def check(x):
if x == 2:
return True
for i in range(2,x):
if x % i == 0:
return False
return True
n = int(input())
ans = 0
for i in range(2,n + 1):
f = True
if check(i):
s = str(i)
for j in range(1,len(s)):
a = s[j:] + s[:j]
if not check(int(a)):
f = False
break
else:
f = False
if f:
ans += 1
print(ans)
6.列表排列
【题目描述】
给定一个由数字组成的列表sList,编写程序将所有 0 移动到列表的末尾,同时保持非零元素的相对顺序。
【输入描述】
共一行,元素以英文逗号隔开。
【输出描述】
共一行,为重新排列好的列表。
【输入样例1】
1,3,4,1.2,0,0,0.0,2,3,5.6
【输出样例1】
[1, 3, 4, 1.2, 2, 3, 5.6, 0, 0, 0.0]
代码:
a = list(map(eval, input().split(',')))
b = []
for i in a:
if i:
b.append(i)
for i in a:
if not i:
b.append(i)
print(b)
7.寻找十全十美数
Description【题目描述】
如果一个n位数刚好包含了1至n中所有数字各一次则称它们是十全十美数。举例来说:四位数4123就是一个十全十美数。若找不到则输出“not found”。
Input【输入要求】
从键盘上输入一组整数,若有多个数以,隔开。
Output【输出要求】
若找不到则输出“not found”,若找到了则依次输出,每个数字占一行。
Sample Input 1
1243,322,321,1212,2354
Sample Output 1
1243
321
Sample Input 2
1212,2354
Sample Output 2
not found
代码:
def check(x):
cnt = dict.fromkeys([chr(49+i) for i in range(len(x))], 0)
for i in x:
if i in cnt.keys() and not cnt[i]:
cnt[i] += 1
else:
return False
return True
a = list(input().split(','))
f = False
for i in a:
if check(i):
f = True
print(i)
if not f:
print('not found')
8.打印空心三角形
Description
输入任意一个大于零的整数N,根据输入的整数不同打印出不同行数的空心三角形。
Input
一个大于0的整数。
Output
一个空心三角形。
Sample Input 1
6
Sample Output 1
*
**
* *
* *
* *
******
代码:
n = int(input())
for i in range(1,n):
for j in range(0,i):
if j==i-1:
print('*')
elif j==0:
print('*', end='')
else:
print(' ', end='')
for i in range(n):
print('*', end='')
9.0的组合
Description【题目描述】
给定一个包含若干个整数(可能存在重复整数)的列表,判断其中是否存在三个元素a,b,c,使得a+b+c=0?找出所有满足条件且不重复的这样的三个数的组合。【注意点】
1、所给的数字是可以重复的,所给数字为1,1,-2,0,0,0;
2、组合是不可以重复的,即[1,-1,2]和[2,-1,1],算是重复的,应该删除;
3、可以借助集合去除重复
Input【输入要求】
共一行,元素以空格隔开。
Output【输出要求】
共一行,为不重复组合的个数,不存在这样的组合就输出0。
Sample Input 1
-1 0 1 2 -1
Sample Output 1
2
Sample Input 2
8 6 7 9 8
Sample Output 2
0
代码:
a = list(map(int,input().split()))
a.sort()
ans = []
for i in range(len(a)):
for j in range(i+1,len(a)):
for k in range(j+1,len(a)):
if a[i] + a[j] +a[k] == 0:
ans.append([a[i],a[j],a[k]])
print(len(set(ans)))
10.水仙花数
题目内容:
编写程序实现以下功能:计算m到n之间的所有水仙花数并输出(水仙花数是一个三位整数,其值与各位数字的立方和相等)。
输入格式:
输入两个三位整数beg和end。
输出格式:
如果beg到end之间存在水仙花数,则每行输出一个水仙花数。如果beg到end之间不存在水仙花数,则输出“not found”。
输入样例:
111
121
输出样例:
not found
代码:
def check(x):
res = 0
for i in str(x):
res += int(i)**3
if res == x:
return True
return False
a, b = int(input()), int(input())
f = True
for i in range(a,1+b):
if check(i):
f = False
print(i)
if f:
print('not found')