算法笔试-编程练习-M-01-24

news2024/9/20 0:27:36
t这套题,偏向灵活,更多的考察了数学、贪心

一、质因数

题目描述

小乖对 gcd (最大公约数) 很感兴趣, 他会询问你t次。 每次询问给出一个大于 1 的正整数 n, 你是否找到一个数字m(2 ≤m ≤ n),使得 gcd(n,m)为素数.

注:原题为给出任意解,本题中请给出最大值作为答案

输入描述

每个测试文件将包含多组测试数据,每组测试数据的第一行包含一个整数 k (2 ≤ k ≤ 10^5), 表示有 k个待测数字.接下来 k 行,每行包含一个整数 n (2 ≤ n ≤ 10^9),表示待测的数字.

输出描述

对于每一组测试数据, 在一行上输出一个整数,代表数字 m。

示例 1

输入

2
114
15

输出

57
5

题目分析

【题目类型:数论、质数】

首先素数和质数是一个概念的两种说法。题目在描述的过程中加了几个拐弯,对于n找到一个m,使gcd(n,m)是素数,求最小的m,其实就是找n的最小质因数m。

这里我们要明确一个概念,所有合数都可以写成若干质数的乘积,所以n的质因数m一定有 m*m<n。这里有两者方案:

1)一种是由于n小于10^9所以可以求出10^5以内所有的质数,然后对于n从小到大遍历。

2)另一种是类似质因数分解的方式,去找n的质因数。

代码:

prime_numbers = []
# 因为 n 小于10^9,则其质因素一定小于10^5
for i in range(2, 100000):
    find = False
    for p in prime_numbers:
        # 一个合数一定有比他小质因数,如果找不到,则该数就是质数
        if p*p > i: 
            break
        if i%p == 0:    
            find = True
            break
    if not find:
        prime_numbers.append(i)

k = int(input())
for _ in range(k):
    n = int(input())
    flag = True
    for p in prime_numbers:
        if p*p > n:
            break
        if n % p == 0:
            print(p)
            flag = False
            break
    if flag:
        print(n)
# 寻找质因素
def calc(n):
    factor = 2
    if n % factor == 0:
        return factor
    
    factor = 3
    if n % factor == 0:
        return factor
    
    while factor*factor <= n:
        if n % factor == 0:
            return factor
        factor += 2 
        # 这里是因为已经确认 n 不会被2整除,所以只遍历奇数就可以(快一点)
    return n    # 能到这里说明没有找到n的质因数,那么n就是素数
    

k = int(input())
for _ in range(k):
    n = int(input())
    print(calc(n))

补充:

作为补充理解,这里给出gcd和lcm的代码:

def gcd(n, m):
    while m:
        n, m = m, n%m
    return n

def lcm(n,m):
    return n*m//gcd(n,m)

n = [1, 12, 6, 10, 30]
m = [3, 18, 15, 21, 20]
for i in range(len(n)):
    print(n[i], m[i], gcd(n[i], m[i]), lcm(n[i], m[i]))

二、极差

题目描述

小乖有一个长度为 n 的数组,每次操作可以选择两个下标i和j,分别减1和加1,小乖想知道最少需要多少次操作,可以使数组极差减小。

数组的极差为数组中最大值和最小值的差

输入描述

第一行输入一个整数 n (2 ≤ n ≤ 10^5), 表示数组的长度 第二行输入n个整数 a_1,a_2,...a_n (1 ≤ a_i ≤ 10^9), 代表数组的元素

输出描述

在一行上输出一个整数,表示最少需要多少次操作。

示例 1

输入

5
1 2 3 4 5

输出

3

题目分析

【题目类型:贪心,数学】

这是一道很直观得平均贪心题目,我们是使用下去取整获得平均数mean,那么只需要让所有数字调整为mean+1 或者mean即可。

由于mean是向下取整得到的,那么原数组中大于mean的数字到mean的差的和,一定大于小于mean的数字到mean的差的和。这个多出来的数值实际上就是mean+1是数量(也就是下面代码中diff = sum(tempList)求得的值)。我们记录大于mean的值的数量为cnt,存在如下两种情况:

1)如果diff >= cnt,那么其实就让所有大于mean的值少减1就可以了。这里的逻辑很直观,就是保证所有原来就大于mean的值为mean+1

2)else cnt>diff,那么就让大于mean的数,少减diff就可以啦。

代码:

n = int(input())
arr = [int(i) for i in input().split()]
mean = sum(arr)//n

tempList = []
cnt = 0
ans = 0
for a in arr:
    temp = a-mean
    if temp>0:
        ans += temp
        cnt += 1
    tempList.append(temp)

diff = sum(tempList)

if diff >= cnt:
    ans -= cnt
elif diff > 1:
    ans -= diff
    
print(ans)

三、博弈

小乖和小坏在玩一个游戏,游戏中有一个长度为 n 的数组a1,a2,...,an和一个固定的整数k。游戏规则如下,双方都会执行最优策略:

第一步,小乖选择一个非空的区间 [l,r],将这个区间中的所有数字都乘上 k。

第二步, 小坏选择一个非空的区间 [l,r], 将这个区间中的所有数字都乘上 k。

记sum=整个数组的和,小坏想让sum尽可能小,小乖想让sum尽可能大,你需要求出最后 sum的值。

输入描述

第一行输入两个整数 n 和 k (-10^5≤ k ≤ 10^5, 1 ≤ n ≤ 1000),代表数组长度和固定的整数。

第二行输入 n 个整数 a1,a2,...,an(−10^5≤ai≤10^5)代表数组。

输出描述

在一行上输出一个整数表示答案。

示例 1

输入

6 2
-1 -2 -3 1 2 3

输出

0

说明

小乖会选择区间[4,6],数组变成{−1,−2,−3,2,4};

小坏会选择区间[1,3],数组变成{−2,−4,−6,2,4,6};

数组总和为 0。

题目分析

【题目类型:最大子序列和,博弈】

对于后手小坏来说,他的决策是贪心的,即为了让sum最小,当k>0时,选择最小子序列和相乘,当k<=0时,选择最大子序列和相乘。而这个问题可以用DP用O(n)的时间复杂度求解,参考算法笔试-编程练习-好题-02-CSDN博客

对于先手小乖来说,难以直接确定如何做可以让sum最大,需要遍历所有情况,检查小坏操作结束后的sum值,选择sum最大的取值。

【注意】博弈问题,通常后手是有贪心解的,但是先手的最优解难以贪心确定。

代码:

import copy
def calc_min(nums_in, k):
    dp = copy.deepcopy(nums_in)
    for i in range(1, len(nums_in)):
        if dp[i-1] < 0:
            dp[i] += dp[i-1]
    return sum(nums_in) + (k-1)*min(dp)

def calc_max(nums_in, k):
    dp = copy.deepcopy(nums_in)
    for i in range(1, len(nums_in)):
        if dp[i-1] > 0:
            dp[i] += dp[i-1]
    return sum(nums_in) + (k-1)*max(dp)

def calc_base(nums_in, l, r, k):
    nums = copy.deepcopy(nums_in)
    for i in range(l, r+1):
        nums[i] *= k
    return nums

def main_calc(nums, n, k):
    if k == 1:
        return sum(nums)
    ans = ""
    
    for l in range(n):
        for r in range(l,n):
            nums_temp = copy.deepcopy(nums)
            # 小乖:遍历
            nums_temp = calc_base(nums_temp, l, r, k)
            # 小坏:贪心
            if k > 0:
                # 找最小的区间
                temp = calc_min(nums_temp, k)
            else:
                # 找最大的区间
                temp = calc_max(nums_temp, k)
            if ans=="" or temp > ans:
                ans = temp
    return ans
                
n, k = map(int, input().split())
nums = [int(i) for i in input().split()]
print(main_calc(nums, n, k))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2101023.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

构建高效智慧水务平台的关键要素有哪些?

在推进智慧水务平台建设的过程中&#xff0c;需着重注意以下几点&#xff0c;以确保系统的先进性与实用性并重&#xff1a; 数据集成与标准化‌&#xff1a;构建统一的数据采集与处理标准&#xff0c;实现多源水务数据的无缝集成与高效管理&#xff0c;为精准决策提供坚实的数据…

逆向工程核心原理 Chapter24 | DLL卸载

DLL卸载技术的学习。 DLL卸载原理 DLL注入&#xff08;Injection&#xff09;是将DLL强制加载进进程的技术。 DLL卸载&#xff08;Ejection&#xff09;则是将强制插入进程的DLL弹出的技术。 两者的原理都十分类似&#xff0c;都用CreateRemoteThread来实现&#xff1a; I…

拼图软件推荐哪个好?日常拼图用这5个就够了

夏日悠长&#xff0c;暑假悄然过去&#xff0c;那些阳光灿烂的日子&#xff0c;是不是已经装满了你的相机和手机&#xff1f; 现在&#xff0c;是时候把这些珍贵的记忆碎片&#xff0c;用创意的拼图方式&#xff0c;编织成一本独一无二的暑假相册了&#xff01; 那么&#xf…

聚鼎装饰画:怎么做好一家装饰画店铺

在当今这个讲究美学和个性化的时代&#xff0c;拥有一家装饰画店铺无疑蕴含着巨大的潜力。然而&#xff0c;要想在这个竞争激烈的市场中崭露头角&#xff0c;不仅需要对艺术有着深厚的理解&#xff0c;还需要具备一定的商业头脑。本文将探讨几个关键的策略&#xff0c;帮助装饰…

行业首家!百度智能云通过中国信通院「H5 端人脸识别安全能力」测评

2024 年 6 月&#xff0c;在中国信通院组织的 H5 端人脸识别产品安全能力评测中&#xff0c;百度智能云「H5 实时活体检测产品-V3.0」在人脸识别算法安全能力、人脸数据传输安全能力、H5 端应用安全能力、身份认证业务安全能力、安全管理能力 5 个方面表现优异&#xff0c;相应…

NameNode 的 Web 界面

http://127.0.0.1:50070/ 图片显示的是Hadoop的Web界面导航栏。导航栏包含以下选项&#xff1a; Hadoop&#xff1a;Hadoop的主页。Overview&#xff1a;集群的概览信息。Datanodes&#xff1a;数据节点的状态和信息。Datanode Volume Failures&#xff1a;数据节点的卷故障信…

SAP B1 三大基本表单标准功能介绍-物料主数据(下)

背景 在 SAP B1 中&#xff0c;科目表、业务伙伴主数据、物料主数据被称为三大基本表单&#xff0c;其中的标准功能是实施项目的基础。本系列文章将逐一介绍三大基本表单各个字段的含义、须填内容、功能等内容。 附上 SAP B1 10.0 的帮助文档&#xff1a;SAP Business One 10…

给大模型加上“记忆”,深入探索 Mem0 项目

背景介绍 在之前的软件应用中&#xff0c;我们总会在应用中保留大量的用户历史操作记录&#xff0c;方便用户下次使用时可以快速查看和复用&#xff0c;甚至基于这些用户记录可以为用户提供个性化的服务。而这些记录往往都保存在传统的结构化或非结构化数据库中。 在大模型的…

高校为什么需要AIGC大数据实验室?

AIGC大数据实验室是一个专注于人工智能生成内容&#xff08;AIGC&#xff09;和大数据相关技术研究、开发与应用的创新实验平台。 AIGC主要研究方向包括&#xff1a;AIGC技术创新、大数据处理与分析、AIGC 与大数据融合应用。 AIGC 技术创新&#xff1a;探索如何利用人工…

企业微信hook协议接口,聚合群聊客户管理工具开发

服务提供了丰富的API和SDK&#xff0c;可以在企微的功能之上进行应用开发和功能扩展 自建应用可以调用企微hook或协议提供的接口来实现数据交互&#xff0c;可以直接调用hook或协议接口提供的功能来进行消息的发送与接收、用户管理、应用管理等操作&#xff0c;通过接口可以实…

线性代数教材书籍推荐

INTRODUCTION TO LINEAR ALGEBRA, 线性代数导论&#xff0c;GILBERT STRANG &#xff0c;有第六版中译本&#xff0c;网上也有第五版英文电子版&#xff0c;个人认为讲理论最好的教材 Practical Linear Algebra for Data Science&#xff0c;From Core Concepts to Applicatio…

相机常见名词详解

本文主要参考超人视觉课程做的笔记&#xff0c;有讲解不太懂的&#xff0c;又做了详细的解释 1、物距&#xff1a;物体到镜片的距离&#xff1b; 2、像距&#xff1a;像到镜片的距离&#xff1b; 3、焦距&#xff1a;镜片到焦点的距离&#xff1b; (1)二倍焦距以外&#xff…

LLM指令微调实践与分析

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

毛辊清洗机的优势:

毛辊清洗机作为一种高效的清洗设备&#xff0c;在食品加工、农产品处理等多个领域得到了广泛应用。其主要优点可以归纳如下&#xff1a; 一、清洗效率高 有效容积大&#xff1a;毛辊清洗机设计有足够大的清洗空间&#xff0c;能够一次性处理大量的物料&#xff0c;如土豆、胡…

智能视频监控平台LntonAIServer安防监控视频平台视频质量诊断功能使用说明

LntonAIServer视频质量诊断功能是一种先进的技术&#xff0c;旨在通过智能分析来评估和优化视频流的质量。这种功能通常集成在视频传输和管理平台中&#xff0c;以提供对视频内容的实时监控和质量控制。以下是关于LntonAIServer视频质量诊断功能的使用说明阐述&#xff1a; 首…

【C++从练气到飞升】19---哈希:哈希冲突 | 哈希函数 | 闭散列 | 开散列

&#x1f388;个人主页&#xff1a;库库的里昂 ✨收录专栏&#xff1a;C从练气到飞升 &#x1f389;鸟欲高飞先振翅&#xff0c;人求上进先读书&#x1f389; 目录 ⛳️推荐 一、unordered 系列关联式容器 二、unordered_map 1.1 unordered_map 介绍 1.2 unordered_map 的…

COD论文笔记 BiRefNet

本质还是一个 U 型编码器解码器结构的分割模型。 我可以考虑将©和(d)结合&#xff0c;即对解码器的输入不进行 patchify,同时在各个阶段引入梯度参考信息 最近的相关工作&#xff0c;中间监督、额外先验(频率&#xff0c;梯度&#xff0c;边缘等)取得不错效果 作者观察到…

Elasticsearch简单介绍

1、 Elasticsearch简介 Elasticsearch 是一个分布式的、基于 RESTful API 的搜索和分析引擎&#xff0c;广泛用于大规模的数据存储和快速检索。它最初由 Shay Banon 于 2010 年开发&#xff0c;是开源的&#xff0c;并且是 Elastic Stack&#xff08;通常称为 ELK Stack&#…

ERP系统与WMS仓储管理系统在库存管理中的不同作用

在当今复杂多变的企业环境中&#xff0c;大型企业对于信息系统的依赖日益加深&#xff0c;特别是在库存管理与供应链优化方面。企业资源规划ERP系统与WMS仓储管理系统作为两大核心系统&#xff0c;各自扮演着不可或缺的角色&#xff0c;并通过紧密协作&#xff0c;共同推动企业…

MuseTalk模型构建指南

一、介绍 MuseTalk 是由腾讯团队开发的先进技术&#xff0c;它是一个实时的音频驱动唇部同步模型。该模型能够根据输入的音频信号&#xff0c;自动调整数字人物的面部图像&#xff0c;使其唇形与音频内容高度同步。 二、特点 多语言支持&#xff1a;该模型支持多种语言&…