【蓝桥杯】刷题

刷题网站

记录总结刷题过程中遇到的一些问题

1、最大公约数与最小公倍数

python 复制代码
a,b=map(int,input().split())

s=a*b

while a%b:

    a,b=b,a%b

print(b,s//b)

2.迭代法求平方根(题号1021)

c 复制代码
#include<stdio.h>
#include<math.h>
int main()
{
    double x1=1.0,x2;
    int a;
    scanf("%d",&a);
    do
    {
        x1=x2;
        x2=(x1+a/x1)/2;
    }while(fabs(x2-x1)>0.00001);
    printf("%.3lf",x1);
    return 0;
}

3、筛选N以内的素数(1022)

采用埃筛法筛选素数

思路是给定一个较大的bool数组,刚开始将其所有元素赋值为True,从2开始,那么2的倍数就一定不是素数,将对应的bool值重新赋值为0,依次,3的倍数也不是素数...

python 复制代码
N=int(input())
isprime=[True]*10000
isprime[0]=False
isprime[1]=False
# print(isprime[0:10])
for i in range(2,N):
    if (isprime[i]==True):
        index=i
        while index<N:
            index+=i
            isprime[index]=0
for i,val in enumerate(isprime[0:N]):
    if val==True:
        print(i)

4、求完数(1017)

一个数如果恰好等于不包含它本身所有因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。

① 这个题最常见的思路是两层循环,依次列举出每一个数的因子并判断

python 复制代码
N=int(input())
x=[1]
for i in range(2,N+1):
    for j in range(2,i):
        if(i%j)==0:
            x.append(j)
    if x !=None:
        if i==sum(x):
            print("%d"%i,"its factors are ",end="")
            print(*x,sep=" ")
        x=[1]

运行时间超时了。。。。。

② 仔细思考一下,一个数的最小因子就是2(最小是2,也有可能是3、5、7),那么一个数的最大因子不会超过其1/2,所以只需要在某个数的一半找其对应的因子即可

python 复制代码
N=int(input())
x=[1]
for i in range(2,N+1):
    for j in range(2,int(i/2)+1):
        if(i%j)==0:
            x.append(j)
    if x !=None:
        if i==sum(x):
            print("%d"%i,"its factors are ",end="")
            print(*x,sep=" ")
        x=[1]

运行时间仍然超时

分析:

第一个时间复杂度为 n ∗ n = o ( n 2 ) n*n=o(n^{2} ) n∗n=o(n2)

第二个时间复杂度为 n ∗ ( n 2 ) = o ( ( n 2 ) 2 ) n*(\frac{n}{2})=o((\frac{n}{2})^{2} ) n∗(2n)=o((2n)2)

整体时间复杂度都为
o ( n 2 ) o(n^{2} ) o(n2)

③后面在网上看到了这一招,自己怎么就没想到喃,先上代码

python 复制代码
n = int(input())
for i in range(6, n + 1, 2):
   factors = [1]
   sqrt_i = int(pow(i,0.5))
   for j in range(2, sqrt_i + 1):
       if i % j == 0:
           factors.append(j)
           if j != i // j:
               factors.append(i // j)
   if sum(factors) == i:
       print(f"{i} its factors are {' '.join(map(str, sorted(factors)))}")

其实就是先穷举找到 0 , x \left 0,\\sqrt{x} \\right 0,x 范围内的因子,然后用x整除这些因子,就可以求到 x , x \left \\sqrt{x},x \\right x ,x范围内的因子

即找全所有因子

计算复杂度可以理解为
o ( n log ⁡ n ) o(n\log_{}{n} ) o(nlogn)

5、数字后移(1046)

这里题目要求的是一种类似循环数组的方式,核心是取余运算

python 复制代码
n=int(input())
x=list(input().split())
y=list(x)
m=int(input())
for i in range(0,n):
    idx=(i+m)%(n)
    y[idx]=x[i]
print(*y,sep=" ")

注意:

python 复制代码
#指向相同的对象,x,y中的一个改变,另一个都会随之改变
x=list(input().split())
y=x
<<<<<<------------------------>>>>>>
#指向不同的对象,两个互不影响
x=list(input().split())
y=list(x)
相关推荐
Lzh编程小栈2 小时前
【嵌入式底层】SPI超透彻详解:通信原理、四线结构、四种模式、寄存器底层 + 面试全集
c语言·stm32·单片机·面试·职场和发展
Dr.kangder4 小时前
嵌入式面试总结(十八)——JTAG调试
嵌入式硬件·面试·职场和发展·架构·嵌入式
Dr.kangder6 小时前
嵌入式面试总结(十六)——AMBA总线
面试·职场和发展·架构·嵌入式·虚拟化·总线
Dr.kangder7 小时前
嵌入式面试总结(十九)——内存泄露
单片机·算法·面试·职场和发展·架构·硬件架构
Dr.kangder7 小时前
嵌入式面试总结(十七)——DMA总线
面试·职场和发展·架构·嵌入式·总线
城管不管1 天前
重生——第九次面试2026.8.13某车一面
分布式·ai·面试·职场和发展·rabbitmq
琥珀色糖1 天前
leetcode hot100题(持续更新)移动零(双指针)
算法·leetcode·职场和发展·双指针·移动零
Dr.kangder1 天前
嵌入式面试总结(十四)——中断处理
单片机·面试·职场和发展·架构·硬件架构·嵌入式
Dr.kangder1 天前
嵌入式面试总结(十)——流水线
单片机·嵌入式硬件·面试·职场和发展·系统架构·嵌入式
淡海水1 天前
C#与常用数据结构源码剖析-全篇导览
开发语言·数据结构·unity·面试·职场和发展·c#