Board logo

标题: [出题]计算1到999999999中包含数字1的个数 [打印本页]

作者: HAT     时间: 2008-11-12 22:28    标题: [出题]计算1到999999999中包含数字1的个数

当n=1时,{1},包含数字1的个数为1; 当n=5时,{1,2,3,4,5},包含数字1的个数为1; 当n=10时,{1,2,3,4,5,6,7,8,9,10},包含数字1的个数为2; 当n=15时,{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},包含数字1的个数为8; 当n=999999999时,{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,...,999999999},包含数字1的个数为多少呢? [ Last edited by HAT on 2008-11-12 at 23:52 ]

作者: huahua0919     时间: 2008-11-12 22:33
n=15的時候好像1的個數值8個啊 是不是我理解錯了

作者: 406317577     时间: 2008-11-12 23:45
希望版主多出几次题.最好出一些低级点的 注明:新手进. 这些都太深奥了

作者: HAT     时间: 2008-11-12 23:52    标题: Re 2楼

是我粗心了,已在顶楼更正。

作者: lxmxn     时间: 2008-11-13 11:04
这个需要考虑算法多一些,如果纯粹的遍历的话,估计程序得跑上一段时间了。

作者: slore     时间: 2008-11-14 12:00
@echo off set n=9 (set /p =当n^=) <nul for /l %%i in (1,1,%n%) do (set /p =9) <nul (set /p =时,包含数字1的个数为:) <nul echo. (set /p =%n%) <nul for /l %%i in (2,1,%n%) do (set /p =0) <nul echo. pause

作者: rexly     时间: 2008-11-14 12:02
过来学习了

作者: Saber     时间: 2008-11-14 14:10

作者: everest79     时间: 2008-11-15 07:06
这个公式是 0—n位数序列中包含1的个数=10^(n-1)*n
1:        1*1                                                                                                =         1
2:       10*1+       1*10                                                                                    =        20
3:      100*1+      10*10+      1*100                                                                        =       300
4:     1000*1+     100*10+     10*100+     1*1000                                                            =      4000
5:    10000*1+    1000*10+    100*100+    10*1000+    1*10000                                                =     50000
6:   100000*1+   10000*10+   1000*100+   100*1000+   10*10000+   1*100000                                    =    600000
7:  1000000*1+  100000*10+  10000*100+  1000*1000+  100*10000+  10*100000+  1*1000000                        =   7000000
8: 10000000*1+ 1000000*10+ 100000*100+ 10000*1000+ 1000*10000+ 100*100000+ 10*1000000+ 1*10000000            =  80000000
9:100000000*1+10000000*10+1000000*100+100000*1000+10000*10000+1000*100000+100*1000000+10*10000000+1*100000000= 900000000

作者: HAT     时间: 2008-11-21 23:22
@echo off
set num=999999999
set result=1
for /f "skip=1 delims=:" %%a in ('^(echo "%num%"^&echo.^)^|findstr /o ".*"') do (
  set /a len=%%a-5
)
echo %len%
set /a len_1=len-1
for /l %%a in (1,1,%len_1%) do (
  set /a result*=10
)
set /a result*=len
echo %result%
pause

作者: 523066680     时间: 2008-12-19 10:53
这可以当概率题来做啊,比如是两位数以内吧,小于10的 就当作是01 02 03 .... 这样就固定为两位数了, 第一位是1 的情况有多少个? 第二位 从 0 - 9 共 10 个 第二位是1 的情况有多少个? 第一位 从 0 - 9 共 10 个 一共是20个 3位数以内的,假定其中一位是1 其余两位数的组合情况从 00-99 共100个 分三位,所以有300个 ......

作者: wxcute     时间: 2008-12-19 11:39
序号:123456789 轮盘:000000000(可从 0 拨到 9) 数字全部拨完出现多少个 1? [1*10^(9-1)]*9 每个位置出现1的个数为 10^8,共 9 个拨码。

作者: kurt101     时间: 2008-12-26 19:27
对于我太难了。这个

作者: Li103Z     时间: 2008-12-26 23:49
在CSDN看见有人写过这样的算法. 运行效率也很高.

作者: PPdos     时间: 2009-1-2 23:48
一共9位 每一位上1 的出现次数为 1次 对于整位数的可以进行排列组合计算

作者: PPdos     时间: 2009-1-2 23:49
哦~11 楼有说阿。。

作者: netbenton     时间: 2009-1-3 02:44
高, 顶一下 要是算1到一个随机数包含的1的个数呢 [ Last edited by netbenton on 2009-1-3 at 02:51 ]