蓝桥杯 阶乘的和(C++完整代码+详细分析)

news2025/1/23 11:29:10

题目描述

原题链接
阶乘的和

问题描述
给定 n 个数 Ai​,问能满足 m! 为 ∑=(Ai!) 的因数的最大的 m 是多少。其中 m! 表示 m 的阶乘,即 1×2×3×⋯×m。

输入格式
输入的第一行包含一个整数 n。
第二行包含 n 个整数,分别表示 Ai​,相邻整数之间使用一个空格分隔。

输出格式
输出一行包含一个整数表示答案。

样例输入

3
2 2 2

样例输出

3

题目分析

要点1:阶乘之和的因数

n个不同的阶乘Ai 之和的最大因数(可写成m!)即为n个阶乘中的那个最小的阶乘

例如,
3个阶乘: 2 ! 4 ! 3 ! 2! 4! 3! 243
之和为 2 ∗ 1 + 4 ∗ 3 ∗ 2 ∗ 1 + 3 ∗ 2 ∗ 1 = 32 2*1+4*3*2*1+3*2*1=32 21+4321+321=32
能作其因数的阶乘的最大值即为 2 ! 2! 2

因为,要想做阶乘之和的因数,则一定是各个阶乘的因数,则最大因数一定为最小的那个阶乘。

要点2:阶乘之和的转化

i + 1 i+1 i+1 i ! i! i! 可转化为 ( i + 1 ) ! (i+1)! (i+1)!

例如,
3 3 3 2 ! 2! 2! 3 ∗ 2 ! = 3 ! 3*2!=3! 32!=3!

因为,
i + 1 i+1 i+1 i ! i! i! ( i + 1 ) ∗ i ! = ( i + 1 ) ! (i+1)*i!=(i+1)! (i+1)i!=(i+1)!

整体分析

则我们可以记录数据中最小的阶乘 res
以及各个阶乘出现的次数(便于进行阶乘的转化)

scanf("%d",&n);
  unordered_map<int,int> map;  //map记录Ai阶乘的次数
  int res=2e9;  //res为阶乘的最小值,设定初值为无穷大

  for(int i=0;i<n;i++){
    int a;  //阶乘a!
    scanf("%d",&a);
    map[a]++;  //阶乘a!出现次数+1
    res=min(res,a);  //找到Ai中的最小值res
  }

从阶乘数最小的res开始遍历阶乘,
若满足 m a p [ i ] % ( i + 1 ) = = 0 map[i]\%(i+1)==0 map[i]%(i+1)==0
则说明存在 i + 1 i+1 i+1 i ! i! i! ,可转化为 ( i + 1 ) ! (i+1)! (i+1)!
且可转为 ( i + 1 ) ! (i+1)! (i+1)!的个数为 m a p [ i ] / ( i + 1 ) map[i]/(i+1) map[i]/(i+1).
否则,
更新阶乘失败,不存在更大的阶乘因数,退出循环遍历。

for(int i=res;;i++){
    if(map[i]%(i+1)==0){  //有i+1个i!,则可转化为(i+1)!
        res=i+1;  //答案更新为i+1
        map[i+1]+=map[i]/(i+1);  //由i!转化为map[i]/(i+1)个(i+1)!
    }
    else break;  //退出循环
  }

完整代码

#include <iostream>
#include <unordered_map>
#include <algorithm>
using namespace std;
int n;
int main()
{
  scanf("%d",&n);

  unordered_map<int,int> map;  //map记录Ai阶乘的次数
  int res=2e9;  //res为结果,设定初值为无穷大

  for(int i=0;i<n;i++){
    int a;  //阶乘a!
    scanf("%d",&a);
    map[a]++;  //阶乘出现次数+1
    res=min(res,a);  //找到Ai中的最小值
  }
  for(int i=res;;i++){
    if(map[i]%(i+1)==0){  //有i+1个i!,则可转化为(i+1)!
        res=i+1;  //答案更新为i+1
        map[i+1]+=map[i]/(i+1);  //由i!转化为map[i]/(i+1)个(i+1)!
    }
    else break;
  }
  printf("%d",res);
  return 0;
}

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

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

相关文章

Maven下载配置

目录 Win下载配置maven的环境变量 Mac下载安装配置环境变量 MavenSetting.xml文件配置 Win 下载 https://maven.apache.org/ 在主页面点击Download 点击archives 最好不要下载使用新版本&#xff0c;我使用的是maven-3.6.3&#xff0c;我们点击页面下方的archives&#xff0…

小程序获取微信运动步数

1、用户点击按钮&#xff0c;在小程序中触发getuserinfo方法&#xff0c;获取用户信息 <scroll-view class"scrollarea" scroll-y type"list"><view class"container"><button bind:tap"getLogin">获取</button&…

OSCP - Proving Grounds - BullyBox

主要知识点 如果发现有域名&#xff0c;则可以加入/etc/hosts后重新执行nmap,nikto等扫描dirsearch的时候可以使用完整一些的字典文件&#xff0c;避免漏掉信息.git dump 具体步骤 执行nmap 扫描&#xff0c;发现 80和22端口开放,访问后发现被重定向到 bullybox.local Star…

MIAOYUN信创云原生项目亮相西部“中试”生态对接活动

近日&#xff0c;以“构建‘中试’生态&#xff0c;赋能科技成果转化”为主题的“科创天府智汇蓉城”西部“中试”生态对接活动在成都高新区菁蓉汇隆重开幕。活动分为成果展览、“中试”生态主场以及成果路演洽谈对接三大板块。在成果展览环节&#xff0c;成都元来云志科技有限…

计算机网络 (47)应用进程跨越网络的通信

前言 计算机网络应用进程跨越网络的通信是一个复杂而关键的过程&#xff0c;它涉及多个层面和组件的协同工作。 一、通信概述 计算机网络中的通信&#xff0c;本质上是不同主机中的应用进程之间的数据交换。为了实现这种通信&#xff0c;需要借助网络协议栈中的各层协议&#x…

封装svg图片展示及操作组件——svgComponent——js技能提升

template部分 <template><div class"canvas-wrapper" ref"canvasWrapper"><svg:viewBox"computedViewBox"ref"svgCanvas"xmlns"http://www.w3.org/2000/svg"xmlns:xlink"http://www.w3.org/1999/xlink…

大数据,Hadoop,HDFS的简单介绍

大数据 海量数据&#xff0c;具有高增长率、数据类型多样化、一定时间内无法使用常规软件工具进行捕捉、管理和处理的数据集 合 大数据的特征: 4V Volume : 巨大的数据量 Variety : 数据类型多样化 结构化的数据 : 即具有固定格式和有限长度的数据 半结构化的数据 : 是…

EAMM: 通过基于音频的情感感知运动模型实现的一次性情感对话人脸合成

EAMM: 通过基于音频的情感感知运动模型实现的一次性情感对话人脸合成 1所有的材料都可以在EAMM: One-Shot Emotional Talking Face via Audio-Based Emotion-Aware Motion Model网站上找到。 摘要 尽管音频驱动的对话人脸生成技术已取得显著进展&#xff0c;但现有方法要么忽…

基于STM32的智能门锁安防系统(开源)

目录 项目演示 项目概述 硬件组成&#xff1a; 功能实现 1. 开锁模式 1.1 按键密码开锁 1.2 门禁卡开锁 1.3 指纹开锁 2. 功能备注 3. 硬件模块工作流程 3.1 步进电机控制 3.2 蜂鸣器提示 3.3 OLED显示 3.4 指纹与卡片管理 项目源代码分析 1. 主程序流程 (main…

2024年度总结:从后端Java到全栈成长的蜕变

目录 前言1. 用数据与实践书写成长篇章2. 技术与生活的双重蜕变3. 技术的进阶与生活的绽放 前言 今年是我入行的第十年&#xff0c;也是记录在CSDN平台上的第五年。这五年来&#xff0c;我始终坚持记录成长的点滴&#xff0c;将个人事业与博客创作紧密相连。一路走来&#xff0…

行人识别检测数据集,yolo格式,PASICAL VOC XML,COCO JSON,darknet等格式的标注都支持,准确识别率可达99.5%

作者简介&#xff1a; 高科&#xff0c;先后在 IBM PlatformComputing从事网格计算&#xff0c;淘米网&#xff0c;网易从事游戏服务器开发&#xff0c;拥有丰富的C&#xff0c;go等语言开发经验&#xff0c;mysql&#xff0c;mongo&#xff0c;redis等数据库&#xff0c;设计模…

Web3 游戏周报(1.13 - 1.19)

回顾上周的区块链游戏概况&#xff0c;查看 Footprint Analytics 与 ABGA 最新发布的数据报告。 【1.13–1.19】Web3 游戏行业动态 索尼区块解决方案实验室 (Sony BSL) 宣布其以太坊 L2 区块链 Soneium 主网上线。Hyve Labs 融资 275 万美元&#xff0c;推动 Web3 游戏基础设…

Java RSA加密工具类(含密钥对生成和根据私钥计算公钥)

RSA算法是一种常用的非对称加密算法&#xff0c;它具有以下主要特点&#xff1a; 1.非对称性&#xff1a;RSA 使用一对密钥——公钥和私钥。公钥用于加密&#xff0c;私钥用于解密&#xff0c;也可以反过来使用私钥签名、公钥验证。相对于对称加密的单一密钥&#xff0c;非对称…

无数据库开源Wiki引擎WikiDocs

简介 什么是 WikiDocs &#xff1f; WikiDocs 是一个无数据库的开源 Markdown 文件平面 Wiki 引擎。它旨在提供一个简单、灵活且易于使用的 Wiki 解决方案&#xff0c;允许用户创建和管理文档而无需依赖传统数据库。 主要特点 无数据库&#xff1a;使用纯文本文件存储数据&am…

Spring Boot 配置(官网文档解读)

目录 摘要 Spring Boot 配置加载顺序 配置文件加载顺序 Spring Boot 配置加载方式 Value Value 注解简单示例 ConfigurationProperties 启动 ConfigurationProperties ConfigurationProperties 验证 ConfigurationProperties 与 Value 对比 Autowired Autowired 自…

Comment(爆破+git泄漏+二次注入)

通过爆破密码的后三位&#xff0c;获得账号为&#xff1a;zhangwei666 F12查看控制台 使用bugscanteam的githack工具&#xff0c;下载泄漏的源码&#xff0c;根据控制台的提示&#xff0c;完整源码还在历史的commit中 git log –reflog 查看历史记录 查看最新的提交记录&#…

C++otlv4连接sql serveer使用记录(注意点)

C使用otlv4在做插入时&#xff0c;有一些设计的坑需要注意 插入数据&#xff1a; 当要给表中插入单个字符时&#xff0c;数据库表设计使用varchar(1)是合理的&#xff0c;但是otlv4一直报错char。 后续查很久才知道&#xff0c;otlv4所写的绑定的字符数组的长度应该实际数组…

2024又是一年的CSDN之旅-总结过去展望未来

一、前言 一年就这样在忙忙碌碌的工作和生活中一晃而过&#xff0c;总结今年在CSDN上发表的博客&#xff0c;也有上百篇之多&#xff0c;首先感谢CSDN这个平台&#xff0c;能让我有一个地方记录工作中的点点滴滴&#xff0c;也在上面学到了不少知识&#xff0c;解决了工作中遇到…

JDK长期支持版本(LTS)

https://blogs.oracle.com/java/post/the-arrival-of-java-23 jdk长期支持版本&#xff08;LTS&#xff09;&#xff1a;JDK 8、11、17、21&#xff1a;

大数据学习(37)- Flink运行时架构

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…