1位的数共9个:1,2,3,4,5,6,7,8,9
2位的数共90个:10,11,12,...,98,99
3位的数共900个:100,101,...,998,999
4位的数共9000个:1000,1001,...,9998,9999
……
其实不难证明,n位的数共有9*10^(n-1)个
由于1位的数只有一个数字长度,所以9个1位数写在一起长度为1*9:
123456789
2位的数每个有2个数字长度,所以90个2位数写在一起长度为2*90=180:
10111213.979899
加上前面的所有1位数,得到1~99写在一起的总长度就是
1*9+2*90=9+180=189:
123456789101112...9899
同理,3位的数每个有3个数字长度,所以900个3位数写在一起的长度就是3*900=2700:
100101102...998999
加上前面1位和2位的数,得到1~999写在一起的总长度就是
1*9+2*90+3*900=2889
由于1位和2位的总长度为189,小于2009,因此第2009个位置肯定不在1~99所组成的串上.但包含3位数以后,总长度变为2889,大于2009了,所以第2009个位置上的数肯定在某个3位数的位置上.
(比方说,你要求第13个位置上的数,但是1位数连起来的长度只有9,小于13,而加上2位数以后,长度变为189,大于等于13了.所以第13个位置的数肯定在某个2位数上,实际上数一下就发现这个2位数是11,第13个位置的数落在它的个位1上.)
求2009的思路也是这样,既然1位和2位的数拼起来一共有189个数字,那么从第一个三位数(100)的第一个数字(1)开始,对应的就是整个串的第190号位置,那么,整个串的第2009号位置,对应的就是3位数的第
2009-190+1=1820
号位置.
由于3位数每个占3个位置,第1个占1~3,第2个占4~6,……,反过来就是,1~3号位置对应第一个三位数,4~6号位置对应第2个三位数.不难推出他们之间的公式:
x号位置对应于第y个三位数:y = [x/3]
(这里[]表示向上取整,即[t]是取不小于t的最小整数,例如[1]=1,[1.1]=2,[1.5]=2,[1.9]=2,[2]=2,[2.01]=3 等等.)
那么第1820个位置对应的就是第 [1820/3] = 607 个三位数.第一个三位数是100,第二个三位数是101,...,所以第607个三位数就是 607+100-1=706,也就是说,整个串的第2009个位置落在3位数706上.
那么,706有三个数字,7、0、6,究竟是落在哪个上面呢?
前面说到,对于全部由3位数写成的串,第1个3位数占1~3号位置,第2个占4~6号位置,……,反过来说:
1号位置对应第1个3位数的第1个数字
2号位置对应第1个3位数的第2个数字
3号位置对应第1个3位数的第3个数字
4号位置对应第2个3位数的第1个数字
5号位置对应第2个3位数的第2个数字
……
不难推出:
设位置为x,则
若 x % 3 = 1,则 x 对应第1个数字
若 x % 3 = 2,则 x 对应第2个数字
若 x % 3 = 0,则 x 对应第3个数字
(x % 3 表示 x 除以 3 的余数,比如 1 % 3 = 1, 2 % 3 = 2, 3 % 3 = 0, 4 % 3 = 1, 5 % 3 = 2, 6 % 3 = 0,等等)
由于1820 % 3 = 2,因此第1820号位置对应的就是相应3位数的第2个数字.这个3位数是706,因此对应的数字就是0.
于是就得到了答案0.