阿里数分笔试

第一题居然是SQL题,好像和牛客SQL篇有些题目类似,

考点:join 操作, sum和 count 函数


select sum(goods_tb.goods_price * sales_num) as sales_total,

sum(goods_tb.goods_price * sales_num)/count(distinct sales_tb.user_id) as per_trans

from sales_tb join goods_tb

on sales_tb.goods_id = goods_tb.goods_id



第二题是一个什么完美数组,具体题目忘记了,但是大体如下:

先排序,然后从小到大扫描;

发现A[i] <=A[i-1]时,需要将 A[i]调整到A[i-1]+1; 举例:[1,2,2,2,5,5] 调整为 [1,2,3,4,5,6]

由于一次操作是选择多个数加 1,所以将A[i]调整到A[i-1]都是可以在调整A[i]之前完成

[1,2,2,2,5,5]

=>[1, 2, 3, 2, 5, 5]

=>[1, 2, 3, 4 , 5, 5]

=>[1, 2, 3, 4, 5, 6]

#include<bits/stdc++.h>
using namespace std;
int main() {
  int n; cin >> n;
  vector<int> A(n); for (auto &a: A) cin >> a;
  sort(A.begin(), A.end());
  int ans = 0;
  for (int i = 1; i < n; i++) {
    if (A[i] <= A[i-1]) A[i] = A[i-1]+1, ans++;
  }
  cout << ans << endl;
}

第三题扫雷,好像别的人发了题面了吧,我题面也不太记得了,太长了

枚举所有的摆放状态state,判断 state 和输入有没有冲突;

如果没有冲冲突,即state 是一个合法的状态;

我们设这个合法的状态的集合为 S;

如果位置(x,y), 在所有的合法状态 s 属于 S 中,s[x][y]都是雷,那么(x,y)这个位置就一定是雷

如果位置(x,y), 在所有的合法状态 s 属于 S 中,s[x][y]都不是雷,那么(x,y)这个位置就一定不是雷

实现:棋盘只有 16 个位置,枚举用用bitset 表示状态

#include<bits/stdc++.h>
using namespace std;

const int MAX_STATE = (1<<16)-1;

int id(int x, int y) {
  return x*4+y;
}
// state表示一个集合,计算(x,y)是否在集合中
bool isIn(int state, int x, int y) {
  return (state>>id(x, y)) & 1;
}
// 计算state表示的状态中,(x,y)位置的周围有多个个雷
int countBoom(int state, int x, int y) {
  int tot = 0;
  for (int nx = max(0, x-1); nx <= min(3, x+1); nx++) {
    for (int ny = max(0, y-1); ny <= min(3, y+1); ny++) {
      tot += isIn(state, nx, ny);
    }
  }
  return tot;
}
// 判断一个 state 是否和输入的布局有冲突
bool isStateValid(int state, vector<string> &G) {
  for (int x = 0; x < 4; x++) {
    for (int y = 0; y < 4; y++) {
      if (G[x][y] == '.') continue;
      if (isIn(state, x, y)) return false;
      if (G[x][y]  - '0' != countBoom(state, x, y)) return false;
    }
  }
  return true;
}

int main() {
  vector<string> G(4); for (auto &g: G) cin >> g;

  int mustBomb = MAX_STATE;
  int notBomb = MAX_STATE;
  //枚举所有状态
  for (int state = 0; state <= MAX_STATE; state++) {
    if (!isStateValid(state, G)) continue;
    mustBomb &= state;
    notBomb &= MAX_STATE ^ state;
  }

  for (int x = 0; x < 4; x++) {
    for (int y = 0; y < 4; y++) {
      if (G[x][y] == '.' && isIn(mustBomb, x, y)) cout << 'X';
      else if (G[x][y] == '.' && isIn(notBomb, x, y)) cout << 'O';
      else cout << G[x][y];
    }
    cout << endl;
  }

}





#阿里巴巴##笔经#
全部评论
请问选择题有时间限制嘛~
点赞 回复 分享
发布于 2022-03-13 16:46
请问是数分的笔试是那个素质测试链接吗?还是另有笔试,我看官网上技术类笔试数据方向的只有数据研发工程师和数据科学家,没有数分?
点赞 回复 分享
发布于 2022-03-07 20:23
这个扫雷的位运算给我看舒服了,牛
点赞 回复 分享
发布于 2022-03-06 17:25
请问有选择题吗?就只有三道编程吗?
点赞 回复 分享
发布于 2022-03-04 23:18

相关推荐

评论
12
48
分享

创作者周榜

更多
正在热议
更多
# 一张图晒出你司的标语 #
4295次浏览 75人参与
# AI面会问哪些问题? #
27838次浏览 553人参与
# 厦门银行科技岗值不值得投 #
8033次浏览 188人参与
# 你的实习产出是真实的还是包装的? #
20197次浏览 342人参与
# 找AI工作可以去哪些公司? #
9097次浏览 233人参与
# 春招至今,你的战绩如何? #
65238次浏览 582人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
15218次浏览 221人参与
# 从事AI岗需要掌握哪些技术栈? #
8932次浏览 304人参与
# 中国电信笔试 #
32001次浏览 292人参与
# 你做过最难的笔试是哪家公司 #
33504次浏览 231人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
340809次浏览 2174人参与
# 阿里笔试 #
178566次浏览 1316人参与
# 哪些公司真双非友好? #
69587次浏览 289人参与
# 机械人避雷的岗位/公司 #
62703次浏览 393人参与
# 第一份工作一定要去大厂吗 #
14611次浏览 122人参与
# 金三银四,你的春招进行到哪个阶段了? #
22077次浏览 280人参与
# 为了减少AI幻觉,你注入过哪些设定? #
26250次浏览 310人参与
# 沪漂/北漂你觉得哪个更苦? #
9843次浏览 193人参与
# 应届生第一份工资要多少合适 #
20683次浏览 86人参与
# HR最不可信的一句话是__ #
6238次浏览 114人参与
# AI时代,哪个岗位还有“活路” #
11535次浏览 345人参与
# 春招你拿到offer了吗 #
831221次浏览 9987人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务