P15435 [蓝桥杯 2025 国 Python B] 免费披萨

传送门

这是一篇 C++ 题解。

题目描述

蓝桥小镇披萨店的老板刚刚烤制了他人生中的第 n n n 个披萨!为了庆祝这一重要时刻,他推出了一项名为“幸运订单”的活动,顾客有机会赢取免费披萨。以下是活动的具体规则:

  1. 生成订单编号:每位顾客需要生成一个九位数的订单编号。生成方法如下:首先,将数字 1 1 1 到 8 8 8 进行任意排列(每个数字正好出现一次),组成一个八位数。然后,在这个八位数的任意位置(可以是开头、结尾或中间)插入一个 1 1 1 到 8 8 8 的数字,从而得到一个九位数的订单编号。
  2. 计算最大公约数,赢取免费披萨:披萨店老板会计算每位顾客生成的订单编号与 n n n 的最大公约数(GCD)。如果某个订单编号与 n n n 的最大公约数最大,那么该顾客就有机会赢得免费披萨。注意:订单编号必须严格满足上述生成规则,如果有多个订单编号与 n n n 的最大公约数相同且达到最大值,则只有生成数值最小的订单编号的顾客能够获奖。

现在,小蓝也想参加这个活动,并希望赢取免费披萨。请你帮助小蓝找出能够让他赢得免费披萨的订单编号。

输入格式

输入一行包含一个八位的正整数 n n n,表示披萨店老板烤制的第 n n n 个披萨。

输出格式

输出一行包含一个九位的正整数表示答案,即小蓝能够赢得免费披萨的最小订单编号。

输入输出样例 #1

输入 #1

12345678 

输出 #1

415637826 

说明/提示

评测用例规模与约定

对于所有评测用例, 10 7 ≤ n < 10 8 10^7 \le n < 10^8 107≤n<108。

题意

首先按以下规则生成一个九位数的订单编号:

  • 首先,将数字 1 1 1 到 8 8 8 进行任意排列(每个数字正好出现一次),组成一个。
  • 然后,在这个八位数的任意位置(可以是开头、结尾或中间)插入一个 1 1 1 到 8 8 8 的数字,从而得到一个九位数的。

接着,我们需要找到一个这样的九位数,要求与 n n n 的最大公约数最大且这个数尽量小。

思路

时间限制为两秒,所以考虑暴力搜索。

首先使用 DFS 生成全排列,包含所有按规则组成的八位数。

接着枚举插入的位置与数字,得到所有合法订单编号。

最后考虑是否为与 n n n 的最大公约数最大且最小的数即可。

代码

#include<bits/stdc++.h>usingnamespace std;longlong n,max_gcd=-1,minn=INT_MAX;int a[10],tot;voiddfs(int pos){if(pos==8)//当生成一个八位数时,开始枚举插入的位置与数字{ string s="";for(int i=1;i<=8;i++)//使用字符串来操作 s+=char(a[i]+'0');for(int ins=0;ins<=8;ins++)for(int num=1;num<=8;num++){ string nine=s.substr(0,ins)+char(num+'0')+s.substr(ins);longlong val=stoll(nine);longlong now_gcd=__gcd(val,n);if(now_gcd>max_gcd){ max_gcd=now_gcd; minn=val;}elseif(now_gcd==max_gcd)if(val<minn) minn=val;//更新}return;}for(int i=1;i<=8;i++)//若不为八位数,继续添加数位{bool flag=0;for(int j=1;j<=pos;j++)if(a[j]==i){ flag=1;break;}if(!flag){ a[pos+1]=i;dfs(pos+1);}}}intmain(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); string s; cin>>s; n=stoll(s);dfs(0);//开始搜索 cout<<minn;//输出所需结果return0;//完结撒花}

Read more

【数据结构与算法】环与相遇:链表带环问题的底层逻辑与工程实现

【数据结构与算法】环与相遇:链表带环问题的底层逻辑与工程实现

🔥小龙报:个人主页 🎬作者简介:C++研发,嵌入式,机器人等方向学习者 ❄️个人专栏:《C语言》《【初阶】数据结构与算法》 ✨ 永远相信美好的事情即将发生 文章目录 * 前言 * 一、带环链表 * 1.1题目 * 1.2 算法原理 * 1.3 代码 * 1.4 数学证明 * 1.4.1 为什么带环slow与fast必定能相遇? * 1.4.2 fast一定只能走2步吗?可以是2步甚至更多吗? * 1.4.2.1 以3步为例 * 1.4.3结论 * 二、环形链表(寻找相遇点) * 2.1 题目

By Ne0inhk

Python金融数据获取终极指南:告别繁琐,5分钟掌握专业级数据源

Python金融数据获取终极指南:告别繁琐,5分钟掌握专业级数据源 【免费下载链接】mootdx通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 还在为金融数据获取而苦恼吗?面对复杂的行情接口、繁琐的数据格式转换,很多数据分析师和量化交易爱好者都感到力不从心。今天,我将为你揭秘一个强大的Python工具——mootdx,它能让你轻松获取通达信金融数据,为你的投资分析提供坚实的数据支撑。 🎯 你的数据获取痛点,我们懂! 数据获取的三大难题: * 接口复杂难上手:传统行情接口学习成本高,文档晦涩 * 数据格式不统一:不同来源的数据格式各异,转换工作繁琐 * 更新维护成本高:数据源不稳定,需要频繁调整和维护 mootdx正是为解决这些痛点而生,它提供了: * 📊 一站式数据解决方案:从历史数据到实时行情,全面覆盖 * 🔄 智能连接优化:自动选择最佳服务器,确保数据稳定获取 * 💡 开发体验升级:简洁的API设计,让数据获取变得简单高效 🚀 快速上手:5分钟开启数据

By Ne0inhk
Python Anaconda 换源: 设置清华源

Python Anaconda 换源: 设置清华源

为 Anaconda 设置清华源可以极大地提升软件包下载和更新的速度。以下是详细的步骤,分为两个主要部分:为 conda 本身设置频道镜像和为 pip 设置索引镜像。 方法一:通过命令行快速设置(推荐) 这是最快捷的方法,通过执行几条命令即可完成。 1. 打开终端(Windows 用 Anaconda Prompt, Mac/Linux 用 Terminal)。 验证配置: 执行以下命令查看当前的配置,确认 channels 里已经都是清华源的地址。 conda config --show channels (可选但推荐)移除默认的官方频道: 为了避免 conda 在官方源和清华源之间来回切换,可以移除默认的 defaults 频道。 conda config --remove channels defaults 设置搜索时显示频道地址: conda config

By Ne0inhk

Python 进阶爬虫:解析知识星球 API

一、知识星球 API 核心原理与接口分析 知识星球的前端页面采用动态加载技术(JavaScript 渲染),所有内容数据均通过后端 API 接口以 JSON 格式返回,前端再将数据渲染为可视化页面。因此,API 爬虫的核心逻辑是模拟前端请求,直接调用 API 接口获取原始 JSON 数据,而非解析 HTML 页面。 1.1 API 接口基础架构 知识星球的 API 接口遵循 RESTful 设计规范,核心请求域名为<font>https://api.zsxq.com</font>,所有接口均通过 HTTPS 协议传输,确保数据安全性。接口主要分为三大类: * 认证类接口:

By Ne0inhk