您的位置:首页 > 其它

00004笔试题

2016-03-03 20:15 260 查看
1.有八个相同的小球,其中有一个比较重,如何只称两次就可以把较重的发现出来?

解析:我的做法是:3 3 2的分法,

(1)8个小球分为三堆,个数分别为3 3 2,

(2)第一次称数量各位3的两堆,

(3)如果平衡,则较重的就在剩下的2个的那堆,第二次就可以称出来;

(4)如果3 3的不平衡,那边重就说明里面有较重的球,第二次将较重的那堆其中两个球拿出来称,剩余一个球,如果称的这两个球平衡,说明未称的那个球就是较重的球,当然如果这两个球一边重,说明那个球就是较重的球。

2.有30元,一元一瓶汽水,两个空瓶可以换一瓶汽水,问最多能喝多少瓶汽水?

解析:59瓶,这个自己可以在草稿纸上简单写写就可以得到答案。

3.找出200以内的素数并且打印出来。

算法:

package com.dqpi.test;

public class Prime {

/*
* 最普通的算法:
* 打印num以内的素数并返回素数个数
* n、m分别为外、内层循环
*/
public void prime(int num){
a:
for(int n=2;n<=num;n++)
{
for(int m=2;m<=n/2;m++)
{
if(n%m==0) {
continue a;
}
}
System.out.println(n+"\t");
}
}

public static void main(String args[]){
Prime p = new Prime();
p.prime(20);
}
}


解析:只要知道素数的定义:除了1和它本身以外再没有其他的因子的数就是素数,平时多积累一些简单的算法就可以。

4.10000阶乘求末尾有多少个连续0的个数

算法实现:

package com.dqpi.test;
/**
*
* @author 李勇勇
*
*/
public class ZeroNum {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int number = 10000;
int count = 0;
while (number>0)
{
count = count + number / 5;
number = number / 5;
}
System.out.println(count);
}

}


解析:这种题存在一种规律,阶乘末尾一个零表示一个进位,可以产生0的有:0 2 4 5 6 8 结尾的数字,2是足够的,因为4、6、8当中都含有因子2,所以都可看当是2,那么关键在于5的数量了那么该问题的实质是要求出1~10000含有多少个5由特殊推广到一般的论证过程可得:

1、 每隔5个,会产生一个0,比如 5, 10 ,15,20.。。

2 、每隔 5×5 个会多产生出一个0,比如 25,50,75,100

3 、每隔 5×5×5 会多出一个0,比如125.

所以10000!后面的0的个数就是:10000/5+10000/25+10000/125+10000/625+10000/3125=2000+400+80+16+3=2499
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: