Java笔试题之计算题
1.8位有符号二进制数 11100101 代表的十进制数为:
答:最高位为1.即为负数。
先对其减一:11100100
再对其取反:00011011 27
结果为:-27
补充:如果最高位为0 ,按常规方式转换。
2. 用13的瓷砖密铺320的地板有几种方式?
答:利用动态规划的思想
3*n的区域铺瓷砖为f(n),如果最后一列竖着(占1m),那么就是f(n-1),如果横着铺(占3m),就是f(n-3)。
f(1) = 1 //当长度为1米的的方法数量
f(2) = 1
f(3) = 2
f(4) = f(3) + f(1) =3
f(5) = f(4) + f(2) =4
f(n) = f(n-1) + f(n-3)
……
f(20) = f(19) + f(17)=1278。 //当长度为20米的方法数量
补充 上楼梯的问题:
一次性只能上一步或者两步,走十步有几种走法
https://www.sohu.com/a/153858619_466939
可以根据最后一步分为2个部分
1.最后一次 走1步 f(9)
2.最后一次 走2步 f(8)
f(10)=f(9)+f(8)
…
f(n)=f(n-1)+f(n-2) -》转态转移方程
4. 用二进制来编码字符串“abcdabaa”,需要能够根据编码,解码回原来的字符串,最少需要()长的二进制字符串?
A.12
B.14
C.18
D.24
利用霍夫曼最短路径:
二叉树如图所示,所以
a=1
b=01
c=000
d=001
编码不唯一。
14+22+31+31=14
5.一个金条31厘米,如果把它切成数段,使其中的一段或者几段能够接成长1到31任何整数的金条,请问至少 切几次?
A.4
B.5
C.6
D.7
31 =16+15
15=8+7
7=4+3
3=2+1
16、8、4、2、1 (5段切4次)
6.一个整数N,他可能等于比它小的若干个整数(大于2)相加。如果存在这样的连续整数,将他们输出,如果没有则不输出。
例: 整数18,18=5+6+7=3+4+5+6。所以输出[5 6 7],[3 4 5 6]。
public class test2 {
public static void main(String args[]){
long startTime = System.currentTimeMillis();//获取当前时间
arithmetic_squence(9);
long endTime = System.currentTimeMillis();//获取当前时间
System.out.println("程序运行时间:"+(endTime-startTime)+"ms");
}
public static void arithmetic_squence(int n){
int comma=0;
//这样的连续数 2个-(n/2+1)个
for(int i=2;i<=n/2+1;i++){//i表示该整数由i个连续整数相加
int value=n/i-(i-1)/2;//当该整数由i个连续整数相加时,这些连续整数的最小值的表达式
//减去是 表示中值的左侧 (i-1)/2 排除了奇偶性的影响
if(value<1)//最小取1
break;
int temp=(value+value+i-1)*i/2;//等差数列,首相加末项乘以项数除以2
if(temp==n){//成功找到连续整数
if(comma!=0)
System.out.print(",");
System.out.print("[");
for(int k=0;k<i;k++){
if(k!=0)
System.out.print(" ");
System.out.print(value+k);
}
System.out.print("]");
comma++;//记录有多少组连续整数组
}
}
System.out.println(comma);
}
}
6.一个堆谷粒5个5个数剩余4粒,4个4个数剩余3粒,3个3个数剩余2粒,2个2个数剩余1粒,问这堆谷粒至少位多少?
答:根据题意:
n+1 可以被5、4、3、2 整除
n+1=543
n=59