第一周

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