数字问题的问题

仔细考虑m个n位十进制数的特点,在一个n位十进制数的由低到高的第i个数位上,总是连续出现10^i个0,然后是10^i个1……一直到10^i个9,9之后又是连续的10^i个0,这样循环出现。找到这个规律,就可以在常数时间内算出第i个数位上每个数字出现的次数。而在第i个数位上,最前面的10^i个0是前导0,应该把它们减掉。

这样,可以只分析给定的输入整数n的每个数位,从面可以得到一个log10(n)的算法,代码如下:


通过对随机生成的测试数据的比较,可以验证第二段代码是正确的。

对两段代码做效率测试,第一次随机产生20万个整数,结果在我的电脑上,第二段代码执行1.744秒。第一段代码等我吃完钣回来看还是没反应,就强行关了它。

第二次产生了1000个整数,再次测试,结果第一段代码在我的电脑上执行的时间是

10.1440秒,而第二段代码的执行时间是0.0800秒。

同样可得第二段代码对于n个输入数据的运行时间界是n*log10(n)的。 

上面的代码中有个pow10数组用来记录10^i,但10^10左右就已经超过了2^32,但是题目给定的输入整数的范围在10^9以内,所以没有影响。

原著中给出的分析如下:

考察由0,1,2...9组成的所有n位数。从n个0到n个9共有10^n个n位数。在这10^n个n位数中,0,1,2.....9第个数字使用次数相同,设为f(n)。f(n)满足如下递推式:

据此,可从高位向低位进行统计,再减去多余的0的个数即可。

著者的思想说的更清楚些应该是这样:

对于一个m位整数,我们可以把0到n之间的n+1个整数从小到大这样来排列:

这样一直排到自然数n。对于从0到199......9这个区间来说,抛去最高位的数字不看,其低m-1位恰好就是m-1个0到m-1个9共10^(m-1)个数。利用原著中的递推公式,在这个区间里,每个数字出现的次数(不包括最高位数字)为(m-1)*10^(m-2)。假设n的最高位数字是x,那么在n之间上述所说的区间共有x个。那么每个数字出现的次数x倍就可以统计完这些区间。再看最高位数字的情况,显然0到x-1这些数字在最高位上再现的次数为10^(m-1),因为一个区间长度为10^(m-1)。而x在最高位上出现次数就是n%10^(m-1)+1了。接下来对n%10^(m-1),即n去掉最高位后的那个数字再继续重复上面的方法。直到

个位,就可以完成题目要求了。比如,对于一个数字34567,我们可以这样来计算从1到34567之间所有数字中每个数字出现的次数:从0到9999,这个区间的每个数字的出现次数可以使用原著中给出的递推公式,即每个数字出现4000次。

从10000到19999,中间除去万位的1不算,又是一个从0000到9999的排列,这样的话,从0到34567之间的这样的区间共有3个。所以从00000到29999之间除万位外每个数字出现次数为3*4000次。然后再统计万位数字,每个区间长度为10000,所以0,1,2在万位上各出现10000次。而3则出现8次。之后,抛掉万位数字,对于4567,再使用上面的方法计算,一直计算到个位即可。

下面是自己的实现代码:



}

分别表示百位数字、十位数字、个位数字,这个三位数能不能写成abc形式?为什么? 解一元二次方程的应用题的步骤与解一元一次方程应用题的步骤一样。 1、在三位数345中,各数位上的数3,4,5各代表着什么含义? 一元二次方程应用 100a+10b+c 345=3×100+4×10+5×1 × 例2:有一个两位数,它的两个数字之和是8,把这个两位数的数字交换位置后所得的数乘以原来的数就得到1855,求原来的两位数。 解:设原来的两位数的个位数字为x, 则十位上的数字为(8-x),由题意得: [10(8-x)+x][10x+(8-x)]=1855 整理后得: x2-8x+15=0 解这个方程得:x1=3 x2=5 当x=3时,8-x=5. 当x=5时,8-x=3. 答:原来的两位数为53或35. 例3:有一个两位数,十位数字比个位数字大3,而此两位数比这两个数字之积的二倍多5, 求这个两位数。 解:设个位上的数字为x, 则十位上的数字为(x+3),由题意得: 10(x+3)+x = 2x(x+3)+5 整理得:2x2-5x-25=0 解得: x1=5, x2=- 5/2(舍去) 答:所求两位数为85. 当 x=5 时, x+3=8 体积问题   如图,一块长方形铁皮的长是宽的2倍,四角各截去一个相等的小正方形,制成高是5cm, 容积是500cm3的无盖长方体容器,求这块铁皮的长和宽. 你知道吗? 思考: 里面有哪些量之间的关系? 长方体的高=小正方形的边长 长方形的长=长方体的底面的长+2小正方形的边长 长方形的宽=长方体的底面的宽+2小正方形的边长 分析: 如果设这块铁皮的宽是xcm, 几何与方程 将一块正方形的铁皮四角剪去一个边长为4cm的小正方形,做成一个无盖的盒子.已知盒子的容积是400cm3,求原铁皮的边长. 快乐学习 x 4 4 (x-8) (x-8) 一块长方形菜地的面积是150m2,如果它的长减少5m, 那么菜地就变成正方形.求原菜地的长和宽. 分析: 画草图 5 5 如果设原菜地宽为xm x x x x x(x+5)=150 可得方程 *

}

  【小结】被减数十位上的7变成8,使被减数增加80-70=10,差也增加了10;减数个位上的7错写成2,使减数减少了7-2=5,这样又使差增加了5,这道题可以说成:正确的差加上10后又加上5得577,求正确的差.所以列式得:577-(7-2)-(80-70)=562.这题的正确答案应该是562。

}

我要回帖

更多关于 数字问题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信