当前位置: 首页 > news >正文

【蓝桥杯】3月27日笔记

1.暴力枚举

给定一个正整数n,请找出所有满足a² + b² = n的整数对(a, b),其中a和b都是正整数,且a ≤ b。

输入格式:一个正整数n (1 ≤ n ≤ 10⁶)
输出格式:所有符合条件的(a, b)对,每行一对,按a的升序排列。如果没有符合条件的对,输出"No solution"。

问题分析:我们需要找到所有满足a² + b² = n的正整数对(a, b),其中a ≤ b。

枚举策略:由于a和b都是正整数且a ≤ b,a的最大可能值是√(n/2),因为如果a > √(n/2),那么a² > n/2,b² = n - a² < n/2 < a²,这将导致b < a,与a ≤ b矛盾。

算法选择:采用枚举算法,遍历a的所有可能取值,对于每个a,计算b² = n - a²,然后检查b是否为整数。

优化:在枚举a时,只需要枚举到√(n/2)即可,减少不必要的计算。

import math

def find_num(n):

    result=[]
    max_a=math.isqrt(n//2)  #计算n//2的整数平方根

    for a in range(1,max_a+1):
        remainder=n-a*a
        b=math.isqrt(remainder)

        if b*b==remainder and b>=a:
            result.append((a,b))

    return result

n=int(input("请输入一个整数:"))
pairs=find_num(n)

if not pairs:
    print("No solution")
else:
    for a,b in pairs:
        print(a,b)
input()

input()会读取用户输入的内容,并将其作为字符串返回。

例如,当用户在控制台输入 3 1 4 1 5 并按下回车键,input() 就会返回字符串 "3 1 4 1 5"

2.快速排序

def quick_sort(arr):
    if len(arr)<=1:
        return arr
    else:
        mid=arr[0]
        left=[x for x in arr[1:] if x<=mid]
        right=[x for x in arr[1:] if x>mid]
        return quick_sort(left)+[mid]+quick_sort(right)

arr=list(map(int,input().split()))

sorted_arr=quick_sort(arr)

print(" ".join(map(str,sorted_arr)))
input().split()

split() 会将一个字符串按照指定的分隔符(如果不指定分隔符,默认使用如空格作为分隔符)分割成多个子字符串,并返回一个包含这些子字符串的列表

input().split() 会把用户输入的字符串按空格分割成多个子字符串。

以上面的输入 "3 1 4 1 5" 为例,input().split() 会返回 ['3', '1', '4', '1', '5'],注意这里列表中的元素仍然是字符串类型。

map(int, input().split())

map() 接收两个参数:一个函数和一个可迭代对象(如列表、元组等)。

map() 函数会将传入的函数应用到可迭代对象的每个元素上,并返回一个迭代器,这个迭代器中的元素是原可迭代对象元素经过函数处理后的结果。

list(map(int, input().split()))

list() 是 Python 的内置函数,用于将一个可迭代对象转换为列表。

Python 列表推导式(List Comprehension) 

列表推导式是一种简洁的创建列表的方式,它允许你在一行代码中生成一个新的列表。

[expression for item in iterable if condition]
left = [x for x in arr[1:] if x <= pivot]
" ".join(map(str, sorted_arr))

join() 是字符串对象的一个方法,它的作用是将一个可迭代对象中的元素连接成一个字符串。调用该方法的空格字符串" " 会作为连接这些元素的分隔符。

3.归并排序

def merge(left, right):
    result = [] 
    i = j = 0  

    while i < len(left) and j < len(right):
        if left[i] < right[j]:
            result.append(left[i]) 
            i = i + 1  
        else:
            result.append(right[j])  
            j = j + 1  

    while i < len(left):
        result.append(left[i])
        i = i + 1

    while j < len(right):
        result.append(right[j])
        j = j + 1

    return result

def merge_sort(arr):
    if len(arr) <= 1:
        return arr
    
    mid = len(arr) // 2

    left = merge_sort(arr[:mid])
    right = merge_sort(arr[mid:])

    return merge(left, right)

weights = list(map(int, input().split()))

sorted_weights = merge_sort(weights)

print(" ".join(map(str, sorted_weights)))

4.桶排序

input_str = input()

# 初始化桶
buckets = [0] * 26

for char in input_str:
    # 计算字符对应的桶索引
    index = ord(char) - ord('a')
    buckets[index] += 1

# 遍历 26 个桶
for i in range(26):
    # 如果桶中的计数不为 0,说明该字符出现过
    if buckets[i] > 0:
        # 根据索引计算对应的字符
        char = chr(i + ord('a'))
        # 输出字符及其出现次数
        print(f"{char}: {buckets[i]}")

相关文章:

  • C++:无序关联容器
  • 修改 docker0 网卡配置的详细步骤
  • Baklib内容中台驱动AI技术融合创新
  • 无穿戴动作捕捉设备:无穿戴,无标记点摄像头智能捕捉人体姿态
  • 【Exception】MybatisPlusException: can not find lambda cache for this entity
  • 【JavaScript】七、函数
  • Spring集成Web环境搭建
  • 什么是LangChain,为什么我们选择使用LangChain,以及它的典型应用场景
  • HCIE-day15-L3VPN
  • 练习:求平方根
  • mysql数据恢复 深度扫描碎片 智能给出恢复建议并执行恢复操作
  • 【Python实用技巧】OS模块详解:文件与目录操作的瑞士军刀
  • 前端性能优化:深入解析哈希算法与TypeScript实践
  • 揭开顺序表的神秘面纱,探索数据结构的精髓
  • Vue2项目打包后,某些图片被转换为base64导致无法显示
  • 股票App开发第一步:如何免费快速的获取股票数据(如何免费获取金融数据)
  • 将网络安全和第三方风险管理与业务目标相结合
  • c++编写拉格朗日插值
  • 1.25-20GHz/500ns超快跳频!盛铂SWFA300国产捷变频频率综合器模块赋能雷达/5G/电子战高频精密控制 本振/频综模块
  • Elasticsearch:理解政府中的人工智能 - 应用、使用案例和实施
  • 安徽池州做企业网站/搜索引擎谷歌
  • 如何做cpa单页网站/什么是seo优化?
  • 网站设计定制/免费二级域名注册申请
  • 建设网站专业/指数平台
  • 肇庆微网站/网站快速收录技术
  • 郑州网站建设兄长好/新媒体