蓝桥杯基础练习汇总详细讲解(二)——回文数、特殊的数字、杨辉三角形、查找整数(具体代码、解题思路、Python)

发布于:2024-03-29 ⋅ 阅读:(22) ⋅ 点赞:(0)

 试题 基础练习 回文数

提交此题   评测记录  

资源限制

内存限制:512.0MB   C/C++时间限制:1.0s   Java时间限制:3.0s   Python时间限制:5.0s

问题描述

  1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。

输出格式

  按从小到大的顺序输出满足条件的四位十进制数。

题目分析:

        根据题目意思我们只需要将数据范围指定为1000~9999即可,然后利用for循环遍历这些数据,对这些数据进行“回文数”条件判断即可。回文数的判断思路为:将遍历得到的数字转换为字符串格式这样便于对数据进行切片比较。将转换得到的字符串,切片取出前两位和倒序取出末尾两位进行比较即可判断该数据是否为回文数。

具体实现如下:

def cycle_number():
        for number in range(1000,9999+1): #划定范围
                str_number=str(number) #将数据转换为字符串
                if str_number[:2]==str_number[-1:-3:-1]: #切片字符串的前两位和倒序切片末尾两位进行比较
                        print(number)
cycle_number()

通过截图:

试题 基础练习 特殊的数字

提交此题   评测记录  

资源限制

内存限制:512.0MB   C/C++时间限制:1.0s   Java时间限制:3.0s   Python时间限制:5.0s

问题描述

  153是一个非常特殊的数,它等于它的每位数字的立方和,即153=1*1*1+5*5*5+3*3*3。编程求所有满足这种条件的三位十进制数。

输出格式

  按从小到大的顺序输出满足条件的三位十进制数,每个数占一行。

题目分析

        根据题目的描述我们可以将数据的范围规定在100~999之间。通过利用for循环遍历这个范围的数据,然后将这个数据的拆分成多个单独的数字,然后将这些单独的数字进行立方再求和,将求和得到的结果与拆分前的数据进行比较,如果相等,满足“特殊数字”要求,即输出该数据。

具体实现如下:

def square_number(x):
        x=int(x) 
        return x*x*x    #返回单独数字的立方运算结果

def specific_number():
        for number in range(100,999+1): #利用for循环遍历指定范围的数据
             str_number=str(number) #将数据转换为字符型,便于map函数操作
             result=sum(list(map(square_number,str_number))) #将可迭代对象字符串,传入map函数进行立方求和运算
             if result==number: #满足条件就输出结果
                     print(number)

specific_number()

通过截图:

试题 基础练习 杨辉三角形

提交此题   评测记录  

资源限制

内存限制:256.0MB   C/C++时间限制:1.0s   Java时间限制:3.0s   Python时间限制:5.0s

问题描述

杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。

  

它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。

  

下面给出了杨辉三角形的前4行:

   1 

  1 1

 1 2 1 

1 3 3 1

  

给出n,输出它的前n行。

输入格式

输入包含一个数n。

输出格式

输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。

样例输入

4

样例输出

1
1 1
1 2 1
1 3 3 1

数据规模与约定

1 <= n <= 34。

题目分析:

        根据题目描述,我发现的规律是三角形每一行输出的第一个字符和最后一个字符都是1。并且从第三行开始,新增的数据等于上一行的除首尾1的内部数据,两两相加形成。基于这个规律我的解题方法是:定义一个列表initialize_list来存储生成的杨辉三角内容,并且因为第一行和第二行数据不用计算,因此直接初始化即可。然后再定义一个临时列表temp_list保存第n(n>3)行需要计算得到的数据。同时将首位的数据1,添加到temp_list中。然后通过列表嵌套列表,将temp_list追加到initilize_list列表中,如此往复,最终得到杨辉三角的内容。

具体实现如下:

def pascal_triangle():
        n=int(input())
        initialize_list=[[1],[1,1]] #定义保存杨辉三角内容的列表
        for count in range(3,n+1):
             temp_list=[1] #将每一行的首位1添加到临时列表中
             result=0
             for i in range(count-2):
                     result=initialize_list[count-2][i]+initialize_list[count-2][i+1] #两两一组依次相加,得到新的数据
                     temp_list.append(result) #将计算数据添加到临时变量中
                     if i==count-3:
                             temp_list.append(1)#将每一行的末尾1添加到临时列表中
             initialize_list.append(temp_list)
        for index in range(len(initialize_list)):
                for i in initialize_list[index]:
                        print(i,end=" ")
                print()
             
pascal_triangle()

通过截图:

试题 基础练习 查找整数

提交此题   评测记录  

资源限制

内存限制:256.0MB   C/C++时间限制:1.0s   Java时间限制:3.0s   Python时间限制:5.0s

问题描述

给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。

输入格式

第一行包含一个整数n。

第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。

第三行包含一个整数a,为待查找的数。

输出格式

如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。

样例输入

6
1 9 4 8 3 9
9

样例输出

2

数据规模与约定

1 <= n <= 1000。

题目分析:

        按照题目的要求,设定好程序的输入格式后,将输入的数列使用split函数按照空格划分转换为列表,然后使用if语句判断目标数字是否在列表中,如果目标元素在列表中,使用列表的内置函数index()快速找出目标数字对应的索引。但是需要注意:Python中列表的索引是从0开始的。

具体实现如下:

def search_number():
        n=int(input()) 
        list_number=input().split(" ") #按照空格将输入数据转换为列表
        target_number=input()
        if target_number in list_number: #使用关键字“in”判断目标数字是否在列表中
                print(list_number.index(target_number)+1) #输出目标数字在列表中的索引值
        else:
                print(-1) #如果目标数字没有在列表中,就输出-1
search_number()

本文含有隐藏内容,请 开通VIP 后查看