恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

P1617 爱与愁的一千个伤心的理由【洛谷算法习题】

  • 首页
  • 资讯中心
  • /
  • P1617 爱与愁的一千个伤心的理由【洛谷算法习题】

相关资讯

如何用 BETAFPV Configurator 快速完成遥控器配置与固件更新(新手指南) 2026/8/21 22:01:18
ASD患者脑网络中“短程环路过度参与、长程环路参与不足”的拓扑特征及脑区分布报告 2026/8/21 21:56:18
中文文本生成完整指南:GPT2-Chinese 三步训练出你的专属语言模型 2026/8/21 21:56:18

最新资讯

EAappEmulater:免装 Origin 的 EA 游戏启动器,战地系列一键直启
如何用TPFanCtrl2让ThinkPad风扇该转才转:从安装到调曲线的完整教程
WarcraftHelper 使用指南:魔兽争霸3宽屏错位、中文路径与帧率锁定的修复方法
bujuan 完全上手指南:如何用 Flutter 打造五端通用的网易云播放器
专业音效库应用指南:从素材管理到Premiere Pro实战
科研生科研效率系统:助力科研人员高效开展科研工作的实用工具方案

今日推荐

OpenCode AI编程助手:从核心原理到本地部署的完整实践指南
基于SpringBoot与Vue的企业资产与采购管理系统设计与实现(程序+文档+讲解)
Linux命令-uucico(UUCP传输程序)

本周热门

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码
【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码
隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

P1617 爱与愁的一千个伤心的理由【洛谷算法习题】

发布时间:2026/8/21 22:01:18
P1617 爱与愁的一千个伤心的理由【洛谷算法习题】 P1617 爱与愁的一千个伤心的理由网页链接P1617 爱与愁的一千个伤心的理由题目背景本道题目隐藏了两首歌名找找看哪~~~《爱与愁的故事第一弹·heartache》第二章。经历了心痛后爱与愁大神不行了。题目描述月落乌啼问爱与愁大神为什么爱与愁大神写了一个数字n nnn ≤ 9999 n \le 9999n≤9999说翻译成英语就知道为什么了。月落乌啼接过这个数字后本想翻译成英语但是班主任叫他去帮个忙。他想尽快知道答案于是这个艰巨的任务就拜托你了。标准美式英语仅在末两位 $ \le 10$ 时加and且没有连字符。输入格式只有一行一个数n nnn ≤ 9999 n \le 9999n≤9999输出格式一行英文表示n nn翻译成英语的答案。输入输出样例 #1输入 #15208输出 #1five thousand two hundred and eight输入输出样例 #2输入 #25280输出 #2five thousand two hundred eighty输入输出样例 #3输入 #35000输出 #3five thousand输入输出样例 #4输入 #45028输出 #4five thousand and twenty eight说明/提示输出行初不大写。按标准美式英语输出即两个非零的数中间没零则不加and行末无句号。解题思路本题是数字转英文单词的模拟题需要根据美式英语规则将一个不超过 9999 的整数翻译成对应的英文表达。核心在于处理千位、百位、十位、个位的拼接以及特殊连接词and的使用条件。1. 问题等价转化数字范围输入为整数n nn且0 ≤ n ≤ 9999 0 \le n \le 99990≤n≤9999。可直接作为字符串读入逆序后方便按位处理。英文表达规则数字0 00单独输出zero。千位数字后接thousand百位数字后接hundred。十位为2 ∼ 9 2\sim92∼9时使用twenty、thirty等词十位为1 11时与个位组合成ten、eleven等特殊词十位为0 00时直接跳过。个位为1 ∼ 9 1\sim91∼9时输出对应单词个位为0 00且十位非0 00时不输出个位。and的添加规则标准美式英语当存在更高位千位或百位且较低两位需要表达时通常需要使用and连接。具体判断若百位为0 00但十位或个位不为0 00且千位存在则在千位后添加and。若百位不为0 00十位为0 00个位不为0 00则在百位后添加and。其他情况不加and。例如5028→ five thousandandtwenty eight5208→ five thousand two hundredandeight5280→ five thousand two hundred eighty不加and。2. 算法实现字符串预处理读入数字字符串s若长度为1 11且为0则直接输出zero。否则将字符串反转存入r使r[i]对应原数字从低位开始的第i ii位0 00个位1 11十位2 22百位3 33千位。从高位到低位遍历i len − 1 → 0 i \text{len}-1 \to 0ilen−1→0千位与百位i 1 i 1i1若当前位非零输出对应数字单词和单位thousand或hundred。百位特殊处理i 2 i 2i2若百位为0 00且后面两位十位或个位中有非零则输出and用于连接千位和后面的数字。十位处理i 1 i 1i1若十位为0 00当个位和百位都非零时输出and例如5208 52085208中的百位2 22和个位8 88。若十位非零且不为1 11输出对应的twenty~ninety单词。若十位为1 11直接输出对应的ten~nineteen单词由于已覆盖个位输出后即可结束。个位处理i 0 i 0i0若个位非零输出对应单词。输出格式各单词之间用空格分隔行末无多余空格首字母不需要大写。3. 复杂度分析时间复杂度O ( L ) O(L)O(L)其中L LL为数字位数L ≤ 4 L \le 4L≤4常数级。空间复杂度O ( 1 ) O(1)O(1)仅使用几个预定义数组和变量。总结本题通过字符串反转将数字各位与单位数组索引对齐按从高位到低位的顺序依次输出并根据题目规定的美式英语and使用条件进行判断。整个模拟过程清晰分支简单适合直接实现。代码简要说明预定义数组a[10]数字0 ∼ 9 0\sim90∼9的英文单词索引0 00为空。b[4]单位数组b[2]hundred,b[3]thousand。c[10]十位2 ∼ 9 2\sim92∼9的英文单词。d[10]数字10 ∼ 19 10\sim1910∼19的英文单词。主流程读入字符串s特判单个字符0。反转得到r从高位向低位遍历。根据i的值分别处理千位/百位、十位、个位并在适当位置输出and。遇到十位为1 11时直接输出 teens 单词并返回避免重复输出个位。代码内容#includebits/stdc.husingnamespacestd;#defineendl\ntypedeflonglongll;typedefunsignedlonglongull;typedefvectorvectorllvvt;typedefpairll,llpll;constll N1e310;constll INF1e18;constll M1e610;constll mod1e97;string a[10]{,one,two,three,four,five,six,seven,eight,nine};string b[4]{,,hundred,thousand};string c[10]{,,twenty,thirty,forty,fifty,sixty,seventy,eighty,ninety};string d[10]{ten,eleven,twelve,thirteen,fourteen,fifteen,sixteen,seventeen,eighteen,nineteen};intmain(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);string s;cins;if(s.size()1){if(s[0]0){coutzero;return0;}couta[s[0]-0];return0;}string rs;reverse(r.begin(),r.end());for(ll is.size()-1;i0;i--){if(i1r[i]0){couta[r[i]-0] b[i] ;}if(i2){if(r[i]0(r[1]!0||r[0]!0))coutand ;}if(i1){if(r[i]0){if(r[0]!0r[2]!0)coutand ;}else{ll xr[i]-0;if(x!1){coutc[x] ;}else{xr[0]-0;coutd[x] ;return0;}}}if(i0)couta[r[i]-0];}return0;}

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号