阿里3月23日笔试
阿里3月23日笔试
第一题
输入一个整数n 1<n<10^9
输出一个整数
找出其所有非空子集中所有元素个数之和,然后对10^9+7取模,输出结果
例如输入2,有{1},{2},{1,2}3个非空子集,所有元素个数之和为4
输出结果为4
思路
用int肯定会超,需要用到BigInteger
对于输入n,求得所有元素之和为n*2^(n-1)
然后再对10^7+7取模即可
代码
public class Solution1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String n = sc.next(); BigInteger in = BigInteger.valueOf(Long.parseLong(n)); BigInteger num = f(in);//种数 BigInteger x = BigInteger.valueOf(10).pow(9).add(BigInteger.valueOf(7)); System.out.println(num.mod(x)); } private static BigInteger f(BigInteger n) { return n.multiply(BigInteger.valueOf(2).pow(n.intValue()-1)); } }
第二题
输入n,m两个整数代表n行m列
下面输入n行字符串,每个字符串都包含m个字符(只含有'.','#','E','S')
其中S代表起点,E代表终点,#代表无法通过
从起点出发,可向左,向右,向上,向下移动一步
也可按如下中心对称移动,也只算移动一步
X(i,j)→ X‘(n+1-i,m+1-j)
求从起点到终点最少需要移动几步
示例输入
4 4 #S.. E#.. #... ....
输出
4
说明
先中心对称到达(4,3),然后向上一步,向右一步,中心对称到达终点
第2题我还没做完到时间了😭
#阿里笔试2020第二场##笔试题目##阿里巴巴#