蓝桥杯Python刷题【非VIP基础篇100分评测】——‘20岁的通信小伙子,没学过数据结构与算法,这好吗,这不好’

  1. 数列排序

问题描述
  给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
输入格式
  第一行为一个整数n。
  第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
输出格式
  输出一行,按从小到大的顺序输出排序后的数列。
样例输入
5
8 3 6 4 9
样例输出
3 4 6 8 9

#encoding:utf-8
def ex1():
    n=int(input()) #n对此题无实质作用
    my_list = sorted(list(map(int,input().split())))
    for i in my_list:
        print(i,' ',end='')

ex1()
  1. 二进制01字串

问题描述
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。
输入格式
本试题没有输入。
输出格式
输出32行,按从小到大的顺序每行一个长度为5的01串。
样例输出
00000
00001
00010
00011
<以下部分省略>

#encoding:utf-8
def ex1():
    for i in range(0,32):
        print(bin(i)[2:].zfill(5))

ex1()
  1. 闰年

问题描述
给定一个年份,判断这一年是不是闰年。
当以下情况之一满足时,这一年是闰年:
年份是4的倍数而不是100的倍数;
年份是400的倍数。
其他的年份都不是闰年。

#encoding:utf-8
def ex1(y):
    if 1990 <= y <= 2050:
        if y % 4 == 0 and y % 100 != 0 or y % 400 == 0:
            return 'yes'
        else:
            return 'no'
    else:
        pass

print(ex1(int(input())))
  1. 查找整数

问题描述
给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
输入格式
第一行包含一个整数n。
第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。
第三行包含一个整数a,为待查找的数。
输出格式
如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。

错误示范:列表转字符串后用find函数

#encoding:utf-8
def ex1(n):
    if 1<= n <= 1000:
        my_list = input().split()
        my_str =''.join(my_list)
        num = input()
        indx = my_str.find(num)
        if indx != -1:
            return indx+1
        else:
            return -1
    else:
        pass

print(ex1(int(input())))

Consequence:
3其实不在输入元素中,依然被找到,且索引无意义.

5
1 22 33 11 4
3
4

正确答案:

#encoding:utf-8
def ex1(n):
    if 1<= n <= 1000:
        my_list = list(map(int, input().split()))
        num = int(input())
        if num in my_list:
            return (int(my_list.index(num)+1))
        else:
            return -1
    else:
        pass

print(ex1(int(input())))
  1. 特殊的数字

问题描述
  153是一个非常特殊的数,它等于它的每位数字的立方和,即
  153= 1x1x1+5x5x5+3x3x3。编程求所有满足这种条件的三位十进制数。
输出格式
  按从小到大的顺序输出满足条件的三位十进制数,每个数占一行。

正确答案:

#encoding:utf-8
def ex1():
    for i in range(0,10):
        nums = i
        for j in range(0,10):
            nums = int(''.join([str(i),str(j)]))
            for k in range(0,10):
                nums = int(''.join([str(i),str(j),str(k)]))
                numb = list(str(nums))
                if len(numb) == 3:
                    if nums == int(numb[0]) * int(numb[0]) * int(numb[0]) + int(numb[1]) * int(numb[1]) * int(numb[1]) + int(numb[2]) * int(numb[2]) * int(numb[2]):
                        print(nums)
ex1()

补充:0-999之间的所有数

#encoding:utf-8
def ex1():
    for i in range(0,10):
        nums = i
        for j in range(0,10):
            nums = int(''.join([str(i),str(j)]))
            for k in range(0,10):
                nums = int(''.join([str(i),str(j),str(k)]))
                numb = list(str(nums))
                if len(numb) == 1:
                    if nums == int(numb[0]) * int(numb[0]) * int(numb[0]):
                        print('%03d'%nums)
                elif len(numb) == 2:
                    if nums == int(numb[0]) * int(numb[0]) * int(numb[0]) + int(numb[1]) * int(numb[1]) * int(numb[1]):
                        print('%03d'%nums)
                else:
                    if nums == int(numb[0]) * int(numb[0]) * int(numb[0]) + int(numb[1]) * int(numb[1]) * int(numb[1]) + int(numb[2]) * int(numb[2]) * int(numb[2]):
                        print(nums)
ex1()

其他参考答案:

for num in range(100, 1000):
    bai = (num // 100) * (num // 100) * (num // 100)
    shi = (num % 100 // 10) * (num % 100 // 10) * (num % 100 // 10)
    ge = (num % 100 % 10) * (num % 100 % 10) * (num % 100 % 10)
    if bai + shi + ge == num:
        print(num)
  1. 回文数

问题描述
  1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。
输出格式
  按从小到大的顺序输出满足条件的四位十进制数。

#encoding:utf-8
def ex1():
    for i in range(0,10):
        nums = i
        for j in range(0,10):
            nums = int(''.join([str(i),str(j)]))
            for k in range(0,10):
                nums = int(''.join([str(i), str(j), str(k)]))
                for l in range(0,10):
                    nums = int(''.join([str(i), str(j), str(k), str(l)]))
                    numb = list(str(nums))
                    if len(numb) == 4:
                        if numb[0:4] == numb[::-1]:
                            print(nums)
ex1()
  1. 特殊回文数

问题描述
  123321是一个非常特殊的数,它从左边读和从右边读是一样的。
  输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。

错误示范:继续forforforfor循环~没学过数据结构与算法的呆毛通信人就是这么硬气!

#encoding:utf-8
def ex1(n):
    if 1<=n<=54:
        for i in range(0,10):
            nums = i
            for j in range(0,10):
                nums = int(''.join([str(i),str(j)]))
                for k in range(0,10):
                    nums = int(''.join([str(i), str(j), str(k)]))
                    for l in range(0,10):
                        nums = int(''.join([str(i), str(j), str(k), str(l)]))
                        for m in range(0, 10):
                            nums = int(''.join([str(i), str(j), str(k), str(l), str(m)]))
                            numb = list(map(int,list(str(nums))))
                            if len(numb) == 5:
                                if numb[0:6] == numb[::-1] and sum(numb) == n:
                                    print(nums)
                            for t in range(0, 10):
                                nums = int(''.join([str(i), str(j), str(k), str(l), str(m), str(t)]))
                                numb = list(map(int,list(str(nums))))
                                if len(numb) == 6:
                                    if numb[0:7] == numb[::-1] and sum(numb) == n:
                                        print(nums)
ex1(int(input()))

答案倒是对了,
蓝桥杯Python刷题【非VIP基础篇100分评测】——‘20岁的通信小伙子,没学过数据结构与算法,这好吗,这不好’_第1张图片
在这里插入图片描述
第一项测试数据就超时,一分不得!
蓝桥杯Python刷题【非VIP基础篇100分评测】——‘20岁的通信小伙子,没学过数据结构与算法,这好吗,这不好’_第2张图片
正确参考答案:

n = int(input()) 
for num in range(10000, 1000000): 
    temp = str(num) 
    if temp[0:] == temp[::-1]: 
    #判断是否是回文数 
        if sum(list(map(int, temp))) == n: 
            print(num)
  1. 杨辉三角

问题描述
杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。
它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。
下面给出了杨辉三角形的前4行:
1 
1 1 
1 2 1 
1 3 3 1
给出n,输出它的前n行。
(温故知新:高阶导数多项式系数其实就是杨辉三角,考研数学要考哦~)

参考答案:

n = int(input(''))
arr = []
for i in range(n):
    arr.append([])
    for j in range(i+1):
        if j == 0 or i == j:
            arr[i].append(1)
        else:
            arr[i].append(arr[i-1][j-1] + arr[i-1][j])
    print(" ".join(str(a) for a in arr[i]))
  1. 数列特征

问题描述
给出n个数,找出这n个数的最大值,最小值,和。

def ex(n):
    if 1 <= n <= 10000:
        my_list = list(map(int,input().split()))
        print(max(my_list))
        print(min(my_list))
        print(sum(my_list))

ex(int(input()))
  1. 十六进制转八进制

问题描述
  给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
  输入的第一行为一个正整数n (1<=n<=10)。
  接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
  输出n行,每行为输入对应的八进制正整数。

【注意】
  输入的十六进制数不会有前导0,比如012A。
  输出的八进制数也不能有前导0。

def ex(n):
    num = list(range(n))
    for i in range(n):
        num[i] = input()
    for i in range(n):
         print(oct(int(num[i],16))[2:])

ex(int(input()))
  1. 十六进制转十进制

问题描述
  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。

def ex():
    num = input()
    print(int(num,16))

ex()
  1. 十进制转十六进制
def ex(num):
    if 0<=num<=2147483647:
        print(hex(num)[2:].upper())
    else:
        pass
ex(int(input()))

问题描述
利用字母可以组成一些美丽的图形,下面给出了一个例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。

参考答案:

i,j = map(int,input().split())
k=[[]]*i
lst=[None] * 26
f=0
for n in range(i):
     k[n] = [None] * j
     if n==0:
         for m in range(26):
             s=m+65
             l=s if s<=90 else s-25
             if m<j:
                 k[0][m]=chr(l)
             lst[m]=chr(l)
     if n>0:
         k[n]=k[0]
         k[n].reverse()
         k[n].append(lst[n])
         k[n].reverse()
         k[n].pop(-1)
         f+=1
     print("".join(k[n]))

你可能感兴趣的:(Python,蓝桥杯,python,蓝桥杯)