阿里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

相关推荐

预计下个星期就能开奖吧,哪位老哥来给个准信
华孝子爱信等:对接人上周说的是这周
点赞 评论 收藏
分享
10-28 14:42
门头沟学院 Java
watermelon1124:因为嵌入式炸了
点赞 评论 收藏
分享
喜欢吃蛋糕仰泳鲈鱼是我的神:字节可以找个hr 给你挂了,再放池子捞
点赞 评论 收藏
分享
Pandaileee:校友加油我现在也只有一个保底太难了
点赞 评论 收藏
分享
4 11 评论
分享
牛客网
牛客企业服务