算法班1、2节-习题代码
第一周
1-成绩排序
题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩都按先录入排列在前的规则处理。
输入描述:
输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开。
输出描述:
按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开
示例1
输入 3 0 fang 90 yang 50 ning 70 输出 fang 90 ning 70 yang 50
import sys while True: try: n = int(input()) flag = int(input()) student = [] for i in range (n): student.append(input().split()) res = sorted(student,key = lambda x : int(x[1]),reverse = 1 - flag) for r in res: print(r[0]+' '+r[1]) except: break
2-二维数组中的查找
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
示例1
输入 7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]] 输出 true
class Solution: # array def Find(self, target, array): # write code here s = 0 e = len(array) - 1 while (e>=0) and (s<= len(array[0]) - 1): if array[e][s] < target: s += 1 elif array[e][s] > target : e -= 1 else: return True return False
3-斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n<39
示例1
输入 4 输出 3
# -*- coding:utf-8 -*- class Solution: def Fibonacci(self, n): # write code here if n <= 1: return n res,n1,n2 = 0,0,1 for i in range(2,n+1): res = n1 + n2 n1 = n2 n2 = res return res
第二周
1-输入整型数组和排序标识,对其元素按照升序或降序进行排序
输入整型数组和排序标识,对其元素按照升序或降序进行排序(一组测试用例可能会有多组数据)
本题有多组输入,请使用while(cin>>)处理
输入描述:
第一行输入数组元素个数
第二行输入待排序的数组,每个数用空格隔开
第三行输入一个整数0或1。0代表升序排序,1代表降序排序
输出描述:
输出排好序的数字
示例1
输入 8 1 2 4 9 3 55 64 25 0 5 1 2 3 4 5 1 输出 1 2 3 4 9 25 55 64 5 4 3 2 1
import sys while True: try: n = int(input()) arr = list(map(int, input().split())) flag = int(input()) arr.sort() if flag == 1: #从小到大输出,就把排序好后的数组倒置 arr.reverse() print(" ".join(map(str,arr))) except: break
2-字符串排序
编写一个程序,将输入字符串中的字符按如下规则排序。
规则 1 :英文字母从 A 到 Z 排列,不区分大小写。
如,输入: Type 输出: epTy
规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。
如,输入: BabA 输出: aABb
规则 3 :非英文字母的其它字符保持原来的位置。
如,输入: By?e 输出: Be?y
注意有多组测试数据,即输入有多行,每一行单独处理(换行符隔开的表示不同行)
输入描述:
输入字符串
输出描述:
输出字符串
示例1
输入 A Famous Saying: Much Ado About Nothing (2012/8). 输出 A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).
# -*- coding:utf-8 -*- while True: try: s = input() tmp = list(s)#将字符串变为list方便操作 s1 = list(filter(lambda x:x.isalpha(),list(s))) #把非字母全部过滤保存到s1 s1.sort(key = str.upper) #排序 cnt = 0 for i in range(len(tmp)): if tmp[i].isalpha():#如果是字母就在tmp对应位置替换一下 tmp[i] = s1[cnt] cnt += 1 print("".join(tmp)) except: break
3-最短排序
对于一个无序数组A,请设计一个算法,求出需要排序的最短子数组的长度。
给定一个整数数组A及它的大小n,请返回最短子数组的长度。
测试样例:
[1,5,3,4,2,6,7],7 返回:4
# -*- coding:utf-8 -*- class ShortSubsequence: def findShortest(self, A, n): # write code here B = sorted(A) l,r = 0,n-1 while l < n and A[l] == B[l]: l += 1 while r >= l and A[r] == B[r]: r -= 1 return r - l + 1