腾讯面试题:0到9999这1万个数中有多少个数字7
- 8021
- WEB周边
- 34
- super_dodo
- 2017/03/15
题目:
0 到 9999 这 1 万个数中有多少个数字 7 ?(请不要理解为多少个数包含 7)
思路&答案
总共有四位数,每位数的可能分别有10种(0~9)。
每一个位,都会出现0-9的交替,实际上在出现7这个角度,各个位是一样的。
现在假设个位固定为7,那么其他的位数的变化数量是10 10 10 = 1000种。
就是说数字7在个位出现的次数为1000。
以此类推,数字7在十位、百位、千位出现的次数也是1000。
故答案为 4 * 1000 = 4000
那其实1-9的数目都是一致的都是 4000个,比较变态是0的个数。。因为正常的逻辑里面 不可能写0001 0002 0010 这样。所以关于有多少个0的计算。欢迎大家拍砖。dodo先用最笨的枚举法把0的个数正确的计算出来。
//用很笨的枚举法来做 $str = ''; for($i=0;$i<10000;$i++){ $str .= $i; } //echo $str.'<hr>'; //输出所有字符串 echo substr_count($str,'7'); //结果为:4000 echo substr_count($str,'1'); //结果为:4000 echo substr_count($str,'9'); //结果为:4000 echo substr_count($str,'0'); //结果为:2890
引申发散一下,如果是有多少个数字里面含有7呢。求拍砖指引。。
//包含某个数字的数目 777只是算包含1个包含7的数字 $num_7 = 0; $num_1 = 0; $num_9 = 0; $num_0 = 0; for($i=0;$i<10000;$i++){ if(strstr($i,'7')){ $num_7 += 1; } if(strstr($i,'1')){ $num_1 += 1; } if(strstr($i,'9')){ $num_9 += 1; } if(strstr($i,0) == true){ $num_0 += 1; } } //echo $str.'<hr>'; //输出所有字符串 echo $num_7.'<hr>'; //结果为:3439 echo $num_1.'<hr>'; //结果为:3439 echo $num_9.'<hr>'; //结果为:3439 echo $num_0.'<hr>'; //结果为:1800 此处需要增加1 因为 strstr(0,0)是0 所以需要加上1 针对0这个数字 //最终结果为 1801
温馨提示:附上一段来自【昆明小泽】的js实现的代码
<script> var n = 10000; var j = 0; var d = 0; for(i=1;i<n;i++){ if(i.toString().indexOf("7") != -1){ j++; } if(i.toString().match(/7/g)){ for(var b =0; b< i.toString().match(/7/g).length;b++){ d++; } } } console.log("如果是包含的话是"+d+"个"); console.log("如果是数字的话是"+j+"个"); </script>
春水初生,春林初盛,春风十里,不如你。——冯唐《三十六大》
相关阅读
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
热门文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
最新文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例