给定一个十进制正整数 n n,写下从 1 1 到 n n 的所有整数,然后数一下每个数的各个数位中出现的数字 1 1 的个数。 例如: 当 n = 2 n=2 时,写下 1 , 2 1,2。这样只出现了 1 1 个 1 1; 当 n = 12 n=12 时,写下 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 1,2,3,4,5,6,7,8,9,10,11,12。这样出现了 5 5 个 1 1。 输入格式 一行,一个正整数 n n。 输出格式 一个正整数,即 1 1 的个数。
这是一个经典的数位统计问题。需要统计从 1 到 n 的所有整数中,数字 '1' 在所有数位上出现的总次数。 我们可以使用数位动态规划(Digit DP)或更简洁高效的数学逐位分析法。这里采用高效数学方法:对每一位(个位、十位、百位……)单独计算该位上数字 1 出现的次数。 --- ✅ 核心思路(按位计算) 设当前处理第 i 位(从右往左,0-indexed,即个位是第 0 位),其对应权重为 `base = 10^i`。 将 n 拆分为三部分: - `high = n / (base * 10)` —— 当前位左边的高位部分 - `cur = (n / base) % 10` —— 当前位上的数字 - `low = n % base` —— 当前位右边的低位部分 那么该位上数字 1 出现的次数为: - 若 `cur == 0`:`high * base` - 若 `cur == 1`:`high * base + low + 1` - 若 `cur > 1`:`(high + 1) * base` 遍历所有位(直到 `base <= n`),累加即可。 --- ✅ 示例验证(n = 12) | 位 | base | high | cur | low | 贡献 | |----|------|------|-----|-----|------| | 个位(i=0) | 1 | 12/10 = 1 | (12/1)%10 = 2 | 12%1 = 0 | cur>1 → (1+1)*1 = 2 | | 十位(i=1) | 10 | 12/100 = 0 | (12/10)%10 = 1 | 12%10 = 2 | cur==1 → 0*10 + 2 + 1 = 3 | | 百位+ | 100 > 12 → 停止 | 总计:2 + 3 = 5 ✅ --- ✅ Python 实现 ```python n = int(input().strip()) count = 0 base = 1 while base <= n: high = n // (base * 10) cur = (n // base) % 10 low = n % base if cur == 0: count += high * base elif cur == 1: count += high * base + low + 1 else: count += (high + 1) * base base *= 10 print(count) ``` 输入 `12` 输出 `5`;输入 `2` 输出 `1`;输入 `1` 输出 `1`;输入 `11` 输出 `4`(1,10,11→1+1+2=4)——均正确。 如需 C++/Java 版本可告知。 [2026-02-04 17:20:12 | AI问答 | 695点数解答]
- [字节豆包] 题目描述 给定一个十进制正整数 n n,写下从 1 1 到 n n 的所有整数,然后数一下每个数的各个数位中出现的数字 1 1 的个数。 例如: 当 n = 2 n=2 时,写下 1 , 2 1,2。这样只出现了 1 1 个 1 1; 当 n = 12 n=12 时,写下 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 1,2,3,4,5,6,7,8,9,10,11,12。这样出现了 5 5 个 1 1。 输入格式 一行,一个正整数 n n。 输出格式 一个正整数,即 1 1 的个数。 input1 复制 9 output1 复制 1 input2 复制 12 output2 复制 5 数据规模与约定 对于 100 % 100% 的数据, 1 ≤ n ≤ 10000 1≤n≤10000。用C++简答 回答篇幅:简单明了(118点数解答 | 2026-01-14 22:06:25)26
- [字节豆包] 题目描述 给定一个十进制正整数 n n,写下从 1 1 到 n n 的所有整数,然后数一下每个数的各个数位中出现的数字 1 1 的个数。 例如: 当 n = 2 n=2 时,写下 1 , 2 1,2。这样只出现了 1 1 个 1 1; 当 n = 12 n=12 时,写下 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 1,2,3,4,5,6,7,8,9,10,11,12。这样出现了 5 5 个 1 1。 输入格式 一行,一个正整数 n n。 输出格式 一个正整数,即 1 1 的个数。 input1 复制 9 output1 复制 1 input2 复制 12 output2 复制 5 数据规模与约定 对于 100 % 100% 的数据, 1 ≤ n ≤ 10000 1≤n≤10000。 C++(413点数解答 | 2026-01-26 17:56:10)21
- [DeepSeek] 给定一个十进制正整数 n n,写下从 1 1 到 n n 的所有整数,然后数一下每个数的各个数位中出现的数字 1 1 的个数。 例如: 当 n = 2 n=2 时,写下 1 , 2 1,2。这样只出现了 1 1 个 1 1; 当 n = 12 n=12 时,写下 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 1,2,3,4,5,6,7,8,9,10,11,12。这样出现了 5 5 个 1 1。 输入格式 一行,一个正整数 n n。 输出格式 一个正整数,即 1 1 的个数。c++(452点数解答 | 2025-12-20 14:49:52)32
- [阿里通义] 给定一个十进制正整数 n n,写下从 1 1 到 n n 的所有整数,然后数一下每个数的各个数位中出现的数字 1 1 的个数。 例如: 当 n = 2 n=2 时,写下 1 , 2 1,2。这样只出现了 1 1 个 1 1; 当 n = 12 n=12 时,写下 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 1,2,3,4,5,6,7,8,9,10,11,12。这样出现了 5 5 个 1 1。 输入格式 一行,一个正整数 n n。 输出格式 一个正整数,即 1 1 的个数。(695点数解答 | 2026-02-04 17:20:12)6
- [字节豆包] 题目(description): 卫星导航系统(如我国自主研发的北斗卫星导航系统)能实时获取位置、速度、时间等时空信息,在交通运输、农林渔业、气象测报、通信授时、救灾减灾、公共安全等领域都得到了广泛应用。 在应用层面,卫星导航系统一般以报文方式进行数据传输,其中$gprmc是常用报文之一,基本的格式如下: $gprmc,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh <1> utc时间,hhmmss.sss(时分秒.毫秒)格式 <2> 定位状态,a=有效定位,v=无效定位 <3> 纬度ddmm.mmmm(度分)格式 <4> 纬度半球n(北半球)或s(南半球) <5> 经度dddmm.mmmm(度分)格式 <6> 经度半球e(东经)或w(西经) <7> 地面速率(000.0~999.9节) <8> 地面航向(000.0~359.9度,以正北为参考基准) <9> utc日期,ddmmyy(日月年)格式 <10> 磁偏角(000.0~180.0度,前面的0也(385点数解答 | 2025-01-08 03:43:54)431
- [字节豆包] 题目(description): 卫星导航系统(如我国自主研发的北斗卫星导航系统)能实时获取位置、速度、时间等时空信息,在交通运输、农林渔业、气象测报、通信授时、救灾减灾、公共安全等领域都得到了广泛应用。 在应用层面,卫星导航系统一般以报文方式进行数据传输,其中$gprmc是常用报文之一,基本的格式如下: $gprmc,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh <1> utc时间,hhmmss.sss(时分秒.毫秒)格式 <2> 定位状态,a=有效定位,v=无效定位 <3> 纬度ddmm.mmmm(度分)格式 <4> 纬度半球n(北半球)或s(南半球) <5> 经度dddmm.mmmm(度分)格式 <6> 经度半球e(东经)或w(西经) <7> 地面速率(000.0~999.9节) <8> 地面航向(000.0~359.9度,以正北为参考基准) <9> utc日期,ddmmyy(日月年)格式 <10> 磁偏角(000.0~180.0度,前面的0也(346点数解答 | 2025-01-08 03:46:29)426
- [字节豆包] 给定一个十进制正整数 n n,写下从 1 1 到 n n 的所有整数,然后数一下每个数的各个数位中出现的数字 1 1 的个数。 例如: 当 n = 2 n=2 时,写下 1 , 2 1,2。这样只出现了 1 1 个 1 1; 当 n = 12 n=12 时,写下 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 1,2,3,4,5,6,7,8,9,10,11,12。这样出现了 5 5 个 1 1。C++简写(380点数解答 | 2026-01-31 14:23:38)9
- [字节豆包] 题目描述 N N 进制数指的是逢 N N 进一的计数制。例如,人们日常生活中大多使用十进制计数,而计算机底层则一般使用二进制。除此之外,八进制和十六进制在一些场合也是常用的计数制(十六进制中,一般使用字母 A 至 F 表示十至十五)。 现在有N个数,请你分别判断他们是否可能是二进制、八进制、十进制、十六进制。例如,15A6F 就只可能是十六进制,而 1011 则是四种进制皆有可能。 输入格式 输入的第一行为一个十进制表示的整数 N N。接下来 N N 行,每行一个字符串,表示需要判断的数。保证所有字符串均由数字和大写字母组成,可能以 0 0 开头。保证不会出现空行。 保证 1 ≤ N ≤ 1000 1≤N≤1000,保证所有字符串长度不超过 10 10。 输出格式 输出 N N 行,每行 4 4 个数,用空格隔开,分别表示给定的字符串是否可能表示一个二进制数、八进制数、十进制数、十六进制数。使用 1 1 表示可能,使用 0 0 表示不可能。 例如,对于只可能是十六进制数的 15A6F,就需要输出 0 0 0 1;而对于四者皆有可能的 1011,则需要输出 (405点数解答 | 2026-01-02 19:43:33)29
- [字节豆包] 题目描述c++ N 进制数指的是逢 N 进一的计数制。例如,人们日常生活中大多使用十进制计数,而计算机底层则一般使用二进制。除此之外,八进制和十六进制在一些场合也是常用的计数制(十六进制中,一般使用字母 A 至 F 表示十至十五)。 现在有N个数,请你分别判断他们是否可能是二进制、八进制、十进制、十六进制。例如,15A6F 就只可能是十六进制,而 1011 则是四种进制皆有可能。 输入格式 输入的第一行为一个十进制表示的整数 N。接下来 N 行,每行一个字符串,表示需要判断的数。保证所有字符串均由数字和大写字母组成,可能以 0 开头。保证不会出现空行。 保证 1≤N≤1000,保证所有字符串长度不超过 10。 输出格式 输出 N 行,每行 4 个数,用空格隔开,分别表示给定的字符串是否可能表示一个二进制数、八进制数、十进制数、十六进制数。使用 1 表示可能,使用 0 表示不可能。 例如,对于只可能是十六进制数的 15A6F,就需要输出 0 0 0 1;而对于四者皆有可能的 1011,则需要输出 1 1 1 1。(812点数解答 | 2026-01-02 19:28:20)31
- [字节豆包] 题目描述 N 进制数指的是逢 N 进一的计数制。例如,人们日常生活中大多使用十进制计数,而计算机底层则一般使用二进制。除此之外,八进制和十六进制在一些场合也是常用的计数制(十六进制中,一般使用字母 A 至 F 表示十至十五)。 现在有N个数,请你分别判断他们是否可能是二进制、八进制、十进制、十六进制。例如,15A6F 就只可能是十六进制,而 1011 则是四种进制皆有可能。 输入格式 输入的第一行为一个十进制表示的整数 N。接下来 N 行,每行一个字符串,表示需要判断的数。保证所有字符串均由数字和大写字母组成,可能以 0 开头。保证不会出现空行。 保证 1≤N≤1000,保证所有字符串长度不超过 10。 输出格式 输出 N 行,每行 4 个数,用空格隔开,分别表示给定的字符串是否可能表示一个二进制数、八进制数、十进制数、十六进制数。使用 1 表示可能,使用 0 表示不可能。 例如,对于只可能是十六进制数的 15A6F,就需要输出 0 0 0 1;而对于四者皆有可能的 1011,则需要输出 1 1 1 1。(251点数解答 | 2026-01-02 19:44:35)32
- [字节豆包] 对于一个长度为 的整数数列: ,我们称之为接龙数列当且仅当 的首位数字恰好等于 的末位数字 。 例如 是接龙数列; 不是接龙数列,因为 的首位数字不等于 的末位数字。 所有长度为 的整数数列都是接龙数列。 现在给定一个长度为 的数列 ,请你计算最少从中删除多少个数,可以使剩下的序列是接龙序列? 输入 第一行包含一个整数 。 第二行包含 个整数 。 对于 100% 的数据,, 。所有 保证不包含前导 。 输出 一个整数代表答案。 样例输入 复制 5 11 121 22 12 2023 样例输出 复制 1 提示 删除 22,剩余 11, 121, 12, 2023 是接龙数列。 (493点数解答 | 2025-12-13 10:25:59)40
- [阿里通义] 一个 5×6 的迷宫样例如下: 要求给出从起点(1,1)到终点(3,4)的路径。 为了处理方便,保证最外圈全都为障碍物。 扩展到一般情况,一个 m×n 的迷宫,要求输出从起点(1,1)到终点(m-2,n-2)的路径。 测试实例保证路径是唯一的。 该题要求自行设计一个栈来做。如果设计的是顺序栈,则保证栈的大小不超过 200 个元素。 输入 第一行为两个整数 m 和 n,表示 m×n 的迷宫。 接下来有 m 行,每行有 n 个数(n 个数之间用空格间隔,值 = 0 表示可以通行,值 = 1 表示为障碍物) 输出 输出从起点到终点的路径,每个坐标占一行,坐标间的行号和列号用一个空格间隔。具体格式可参考样例。c++ 源代码(732点数解答 | 2024-11-03 02:34:53)498