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

刷题日记day6(数学)

题目描述

  • 牛客小白月赛152E题 9运算
  • 题解来自大神Kendieer
  • 大神的牛客小白月赛125讲解

思路分析


C++代码展示

#include<bits/stdc++.h>#defineint__int128#definell__int128usingnamespacestd;inta1[100],a9[100];inlinellread(){ll x=0,f=0;charch=0;while(!isdigit(ch)){f|=(ch=='-');ch=getchar();}while(isdigit(ch)){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}returnf?(-x):x;}inlinevoidwrite(ll x){charnum[65];ll cnt=0;if(!x){putchar('0');return;}if(x<0){putchar('-');x=(-x);}while(x>0){num[cnt++]=x%10+'0';x/=10;}while(cnt>0){putchar(num[--cnt]);}}voidinit(){for(inti=1;i<=32;i++)a1[i]=a1[i-1]*10+1;for(inti=1;i<=32;i++)a9[i]=a1[i-1]*9;}voidsolve(){intans=1e35;intx=read();if(x%9==0){for(inti=1;i<=32;i++){if(a9[i]>=x){ans=min(ans,(a9[i]-x)/9);break;}}}for(inti=1;i<=32;i++){if(a9[i]-9*x>=0){intmiu=(a9[i]-9*x)/81;intlemuda=(a9[i]-81*miu-9*x)/9;inttemp=miu+lemuda+1;ans=min(ans,temp);}}write(ans);putchar('\n');}signedmain(){intT=read();init();while(T--)solve();return0;}

AI代码注释

#include<bits/stdc++.h>#defineint__int128// 重定义int为__int128,处理超大数避免溢出#definell__int128// 别名,简化__int128的书写usingnamespacestd;// 全局数组:a1[i]存储i个1组成的数(如a1[3]=111);a9[i]存储i个9组成的"好数字"(如a9[3]=999)inta1[100],a9[100];// 内联函数:读取__int128类型数字(cin/cout不支持__int128,手动实现)inlinellread(){ll x=0,f=0;// x存储数值,f标记是否为负数(本题x为正,f实际无作用)charch=0;// 跳过非数字字符while(!isdigit(ch)){f|=(ch=='-');// 若有负号,标记f=1ch=getchar();}// 逐位读取数字,计算数值(位运算优化:x*10 = x<<3 + x<<1)while(isdigit(ch)){x=(x<<3)+(x<<1)+(ch^48);// ch^48等价于ch-'0',转字符为数字ch=getchar();}returnf?(-x):x;// 负数返回-x,正数返回x}// 内联函数:输出__int128类型数字(cin/cout不支持__int128,手动实现)inlinevoidwrite(ll x){charnum[65];// 存储数字的每一位字符(逆序)ll cnt=0;if(!x){// 特殊处理x=0的情况putchar('0');return;}if(x<0){// 处理负数(本题x为正,此分支无实际作用)putchar('-');x=(-x);}// 逐位拆分数字,存入num数组(逆序存储)while(x>0){num[cnt++]=x%10+'0';// x%10取最后一位,+ '0'转为字符x/=10;}// 逆序输出,恢复数字的正确顺序while(cnt>0){putchar(num[--cnt]);}}// 初始化函数:预处理生成a1和a9数组(32位以内的1序列和9序列)voidinit(){// 递推生成i个1组成的数:a1[1]=1, a1[2]=11, a1[3]=111...for(inti=1;i<=32;i++)a1[i]=a1[i-1]*10+1;// 递推生成i个9组成的"好数字":a9[1]=9, a9[2]=99, a9[3]=999...for(inti=1;i<=32;i++)a9[i]=a1[i-1]*9;}// 核心解题函数:计算将x转为"好数字"的最少步数voidsolve(){intans=1e35;// 初始化最小步数为极大值(1e35远大于可能的最大步数)intx=read();// 读取当前测试用例的初始数字x// 场景1:不使用乘9操作,仅通过加9变为好数字if(x%9==0){// 前提:x必须是9的倍数(好数字都是9的倍数)// 枚举所有位数的好数字,找到第一个比x大的for(inti=1;i<=32;i++){if(a9[i]>x){// 计算加9步数:(好数字 - x)/9,更新最小步数ans=min(ans,(a9[i]-x)/9);break;// 第一个更大的好数字步数最少,无需继续枚举}}}// 场景2:使用1次乘9操作,再通过加9变为好数字for(inti=1;i<=32;i++){// 好数字需≥9*x(乘9后的数字),否则无法通过加9得到if(a9[i]-9*x>=0){// 拆分加9操作:miu是加81(9*9)的次数,lemuda是剩余加9的次数intmiu=(a9[i]-9*x)/81;intlemuda=(a9[i]-81*miu-9*x)/9;inttemp=miu+lemuda+1;// 总步数=加81次数+加9次数+1次乘9ans=min(ans,temp);// 更新最小步数}}write(ans);// 输出最小步数putchar('\n');// 换行分隔测试用例}// 主函数:处理多组测试用例signedmain(){intT=read();// 读取测试数据组数Tinit();// 预处理生成1序列和9序列数组while(T--)solve();// 逐组处理测试用例return0;}
http://www.jsqmd.com/news/94548/

相关文章:

  • 吴恩达深度学习课程四:计算机视觉 第二周:经典网络结构 (一)经典卷积网络
  • 【Flutter x 鸿蒙】第四篇:双向通信——Flutter调用鸿蒙原生能力 - 青青子衿-
  • 【医疗数据监管新规应对指南】:基于PHP的实时审计日志监控系统搭建
  • 锂离子电池二阶等效电路模型,基于MATLAB SIMULINK模块搭建,模型中包含一套完整的二...
  • Java毕设项目:基于springboot工资管理系统(源码+文档,讲解、调试运行,定制等)
  • LangChain 1.0 Agent开发实战:从入门到智能运行体构建!
  • 美国银行可以“炒币”了?加密货币公司“持证”开启金融新玩法!
  • 【R Shiny多模态数据导入终极指南】:掌握5种高效组件实现无缝数据集成
  • concaveman
  • 2025最新模温机供应商厂家推荐排行榜
  • 基于STM32智能营养称系统的设计与实现_352
  • Java毕设项目:基于SpringBoot+Vue高校奖学金评定管理系统设计与实现基于springboot高校学生奖学金评定系统的设计与实现(源码+文档,讲解、调试运行,定制等)
  • 2025年12月尼龙扎带厂家推荐,全场景真实调研口碑数据化解析,尼龙扎带 不锈钢扎带 线卡 十字架 定位片 瓷砖找平器 梅花管 扎丝带测评! - 品牌鉴赏师
  • 一文详解「全面向加密货币转型」的 Robinhood 最新基本面及收入来源
  • 医疗数据泄露风险激增?,紧急应对PHP脱敏新规调整
  • Laravel 13多模态文档实战指南(9大核心功能全曝光)
  • 日志堆积导致系统崩溃?连接器日志优化的3大黄金法则
  • 汇川H5U标准化编程模板!! 逻辑非常清晰,对规范化编程很有参考价值!!! 1.注释详细,功能齐全,逻辑严谨 2.软元件命名,地址规划规范 3.启停、报警总结、光电检测程序完整 4.气缸、轴控功能块编
  • 还在为监测点稀疏发愁?R语言克里金插值让你的数据“无中生有”
  • 智能运维(AIOps)平台综合评测与选型指南(2025)
  • thupc2026初赛题解
  • 模温机制造企业口碑排行榜:2025最新
  • 罗德与施瓦茨示波器在射频测试中的应用
  • 紧急预警:不解决这4个PHP网关协议问题,你的农业物联网系统将瘫痪
  • 【企业数字化转型新引擎】:量子服务集成带来的4倍效能提升秘诀
  • 蚂蚁“灵光”实测测评:这款号称“让复杂变简单”的AI工具到底好不好用?
  • 英语_作文_Teamwork
  • React Native鸿蒙开发实战(二):基础组件与Flex布局 - 青青子衿-
  • 揭秘R Shiny文件上传黑科技:如何同时处理CSV、Excel、图像与JSON?
  • 揭秘医疗系统PHP数据备份难题:3步实现安全可靠备份