2023 阿里达摩院笔试题 阿里笔试 0902

笔试时间:2023年9月2日 秋招

第一题

题目:小红的回文博弈

小红和朋友玩游戏,初始有一个字符串s,两个人轮流操作:

1、先将字符串重新排列;

2、如果可以通过重新排列得到一个回文串,则游戏结束,当前操作的人获胜;

3、否则,当前操作的人必须删除字符串中的一个字符;

小红先手,两人都采用最优策略,问最后谁能获胜。

输入描述

第一行一个整数t,表示数据组数;

接下来t行,每行一个字符串s,仅包含小写学母,长度不超过100000。(1<t< 20)

输出描述

输出t行,每行一个字符串,小红获胜输出“red”,朋友获胜输出“friend”。

样例输入

3

aab

abc

abcd

样例输出

red

red

friend

提示:

第一组,小红可以重新排列得到回文串"aba",获胜。

第二组,小红删除后,朋友无法获胜,朋友删除后只剩下一个字符,是回文串,小红获胜。

参考题解

Java:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int T = scanner.nextInt();
        scanner.nextLine(); // Consume the newline character

        while (T-- > 0) {
            String s = scanner.nextLine();
            int bs = 0;

            for (char ch : s.toCharArray()) {
                bs ^= 1 << (ch - 'a');
            }

            int m = Integer.bitCount(bs);

            if (m == 0 || (m & 1) == 1) {
                System.out.println("red");
            } else {
                System.out.println("friend");
            }
        }
    }
}

Python:

T = int(input())

for _ in range(T):
    s = input()
    bs = 0

    for ch in s:
        bs ^= 1 << (ord(ch) - ord('a'))

    m = bin(bs).count('1')

    if m == 0 or m % 2 == 1:
        print("red")
    else:
        print("friend")

第二题

题目:小红的二叉树

小红拿到一个奇怪的二叉树,如下图所示:

输入描述

第一层从左往右赋值,第二层从右往左赋值,第三层从左往右赋值.....以此类推。这个二叉树有无穷多层。

小红有t次询问,每次询问输入两个正整数x,y,她想知道x和y在二叉树上的路径长度是多少。你能帮帮她吗?

第一行输入一个正整数q,代表询问次数。接下来的q行,每行输入两个正整数x,y,代表一次询问。

输出描述

输出q行,每行输出一个整数,代表该次询问的答案。

样例输入

3

11 4

2 5

7 7

样例输出

5

3

0

参考题解

Java:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int q = scanner.nextInt();

        while (q-- > 0) {
            int x = scanner.nextInt();
            int y = scanner.nextInt();

            x = originId(x);
            y = originId(y);

            int result = solve(x, y);
            System.out.println(result);
        }
    }

    public static int bitCount(int x) {
        int cnt = 0;
        while (x != 0) {
            cnt++;
            x >>= 1;
        }
        return cnt;
    }

    public static int originId(int x) {
        int k = bitCount(x) - 1;
        if ((k & 1) == 0) {
            return x;
        } else {
            retu

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2023 秋招笔试题汇总解析 文章被收录于专栏

2023秋招各大笔试题汇总,c++,java,python多种语言分析,解答。

全部评论
达摩院的笔试只有两题吗哥
点赞 回复 分享
发布于 2023-09-23 00:21 上海
服了呀,第三题不对啊,一直编译错误
点赞 回复 分享
发布于 2023-10-14 20:02 北京
谢谢老哥 今天也考了第一题
点赞 回复 分享
发布于 2023-10-14 20:43 北京

相关推荐

02-22 20:28
重庆大学 Java
程序员牛肉:首先不要焦虑,你肯定是有希望的。 首先我觉得你得好好想一想自己想要什么。找不到开发岗就一定是失败的吗?那开发岗的35岁危机怎么说?因此无论是找工作还是考公我觉得你都需要慎重的想一想。但你一定要避开这样一个误区:“我是因为找不到工作所以不得不选择考公”。 千万不要这么想。你这个学历挺好的了,因此你投后端岗肯定是有面试机会的。有多少人简历写的再牛逼,直接连机筛简历都过不去有啥用?因此你先保持自信一点。 以你现在的水平的话,其实如果想要找到暑期实习就两个月:一个月做项目+深挖,并且不断的背八股。只要自己辛苦一点,五月份之前肯定是可以找到暑期实习的,你有点太过于高看大家之间的技术差距了。不要焦虑不要焦虑。 除此之外说回你这个简历内容的话,基本可以全丢了。如果想做后端,先踏踏实实做两个项目再说+背八股再说。如果想考公,那就直接备战考公。 但是但是就像我前面说的:你考公的理由可以是因为想追求稳定,想追求轻松。但唯独不能是因为觉得自己找不到工作。不能这么小瞧自己和自己的学历。
点赞 评论 收藏
分享
牛可乐121381:卖课的
点赞 评论 收藏
分享
评论
3
13
分享

创作者周榜

更多
牛客网
牛客企业服务