You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#算法问题:统计1-20数字位出现次数如何用for循环或更优方法实现

1-20整数数字位出现次数的实现方案

基于整数数组+for循环的实现方法

实现逻辑非常清晰:

  • 先初始化一个长度为10的整数计数数组,数组索引对应0-9的数字位,初始值全部为0,专门用来存储每个数字位的出现次数
  • 外层for循环遍历1到20的所有整数
  • 对每个遍历到的整数,内层用循环逐位拆解数字:每次用% 10取当前的个位数字,对应计数数组的位置数值+1,再用/ 10去掉已经统计过的个位,直到当前数字变为0即拆解完成
  • 最后遍历计数数组的1到9位,按照要求的格式输出结果即可

示例代码(C#为例)

// 初始化计数数组,索引0-9对应数字0-9的出现次数
int[] count = new int[10];

// 遍历1到20的所有整数
for (int num = 1; num <= 20; num++)
{
    int temp = num;
    // 逐位拆解数字
    while (temp > 0)
    {
        int digit = temp % 10;
        count[digit]++;
        temp = temp / 10;
    }
}

// 按要求格式输出
for (int i = 1; i <= 9; i++)
{
    Console.WriteLine($"Number of {i}: {count[i]}");
}

更优方案说明

如果你的需求只是统计1到20的范围,上面的整数数组+for循环的方案已经是最优的,时间复杂度为O(n数字位数),n=20的时候计算量极小,没有额外优化空间。
如果后续需要统计的数字范围很大(比如到10^9级别),遍历每个数字的方案效率会很低,这时候可以用
数位动态规划*的方案,直接按位计算每个数字的出现次数,时间复杂度只和数字的位数有关,和范围大小无关,效率会高很多。

内容的提问来源于stack exchange,提问作者Tan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 21:27:03