12 2011 档案
摘要:有这么一个数,当把它的最后一位(个位)挪到第一位的时候,得到的新数刚好是原来数的两倍。问这个数是多少?——出自 1985 出版的一本小学5年级学生用的数学课外读物——《儿童数学世界》这个问题看似简单,就是要找一个数出来,把这个数个位上的数字挪到最前面去,例如 123 变成 312,12345变成51234。但是还要求得到的“新数”要是原来数的两倍。简单的分析一下这条业务规则,不难得出下面的结论:1. 取一个数作为“原数”;2. 把“原数”个位上的数字挪到最前面,保存为一个“新数”;3. 比较两个数字,如果“新数”是“原数”的两倍,则打印两个数并退出程序;4. 如果不符合要求,则原数自加1并回到
阅读全文
摘要:有一个12品脱(pint)的酒瓶,里面装满葡萄酒,另有8品脱和5品脱的瓶子各一个。问如何从中分出6品脱的酒出来?传说泊松年轻时成功解决了该问题,勾起了他对数学的兴趣而投身数学研究,因此该问题被称为泊松分酒问题。另外这个问题又被称为分油问题啦,分水问题啦等等。小学的时候在一本《十万个问什么——数学卷》中看到过这个问题,那本书直接给出了一个解答过程,又没说原理,看得我糊里糊涂。一 . 解答过程为了方便说明,将容量为12品脱,8品脱,5品脱瓶子分别称为大瓶子,中瓶子,小瓶子。按照下面2种规则中的如何一种可以解决这个问题:第一套规则:1. 大瓶子只能倒入中瓶子2. 中瓶子只能倒入小瓶子3. 小瓶子只能
阅读全文
摘要:这是一个很有意思的问题,也是在面试中最容易被问到的问题之一。这个问题有个正式的名字叫Hamming_weight,而且wikipedia上也提供了很好的位运算解决的方法,这个下面也会提到。解决这个问题的第一想法是一位一位的观察,判断是否为1,是则计数器加一,否则跳到下一位,于是很容易有这样的程序。?12345678910int test(int n) { int count=0; while(n != 0){ if(n%2 ==1) count++; n /= 2; } return count; }或者和其等价的位运算版本:?123456789int test(int n) { int co
阅读全文
摘要:问题描述: 给定一个十进制整数N,求出从1到N的所有整数中出现”1”的个数。 例如:N=2,1,2出现了1个“1”。 N=12,1,2,3,4,5,6,7,8,9,10,11,12。出现了5个“1”。问题求解:解法一: 最直接的方法就是从1开始遍历到N,将其中每一个数中含有“1”的个数加起来,就得到了问题的解。 代码如下:public long CountOne3(long n) { long i = 0,j = 1; long count = 0; for (i = 0; i <= n; i++) ...
阅读全文

浙公网安备 33010602011771号