【蓝桥杯】刷题

刷题网站

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

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)
相关推荐
凯瑟琳.奥古斯特5 小时前
高阶子查询题目精炼
开发语言·数据库·python·职场和发展·数据库开发
凯瑟琳.奥古斯特7 小时前
数据库原理选择题精选
数据库·python·职场和发展
秦明月139 小时前
水冷板装配安全回路设计实战解析
经验分享·其他·职场和发展·创业创新·学习方法
x_xbx12 小时前
LeetCode:5. 最长回文子串
算法·leetcode·职场和发展
过期动态16 小时前
【LeetCode 热题 100】无重复字符的最长子串
java·数据结构·spring boot·算法·leetcode·职场和发展
Raink老师17 小时前
【AI面试临阵磨枪-088】Skill 如何做参数校验、依赖注入、权限控制、超时、重试、幂等?
人工智能·面试·职场和发展
浅念-17 小时前
LeetCode 记忆化搜索 刷题总结
数据结构·算法·leetcode·职场和发展·深度优先·dfs
bbaydnog18 小时前
嵌入式面试高频题第4弹:函数指针进阶、堆栈分析、Makefile入门,这3个答不上来就悬了
单片机·面试·职场和发展
jiayong2318 小时前
海量数据常见面试问题及详细解答
大数据·面试·职场和发展
我爱cope18 小时前
【Agent智能体12 | 反思设计模式-使用外部反馈】
人工智能·设计模式·语言模型·职场和发展