阿里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第二场##笔试题目##阿里巴巴#
全部评论
n*2^(n-1)怎么得到的?
点赞 回复 分享
发布于 2020-03-24 10:37
不错啊,帮我顶下招聘帖来了请你喝咖啡
点赞 回复 分享
发布于 2020-03-24 17:44
想问下,用上面这种方法,不会超时吗?
点赞 回复 分享
发布于 2020-03-28 16:21

相关推荐

头像
11-07 01:12
重庆大学 Java
精致的小松鼠人狠话不多:签哪了哥
点赞 评论 收藏
分享
4 11 评论
分享
牛客网
牛客企业服务