【阿里笔试题汇总】[全网首发]2024-05-07-阿里文娱春招笔试题-三语言题解(CPP/Python/Java)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

✨ 本系列打算持续跟新阿里文娱近期的春秋招笔试题汇总~

💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导

👏 感谢大家的订阅➕ 和 喜欢💗

📧 清隆这边最近正在收集近一年互联网各厂的笔试题汇总,如果有需要的小伙伴可以关注后私信一下 清隆领取,会在飞书进行同步的跟新。

文章目录

    • 🎬 01.时间复杂度判断
      • 题目描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 🎤 02.K小姐的阶乘中的零计数
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 🎧 03.神奇数字
      • 题目描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 写在最后
    • 📧 清隆这边最近正在收集近一年互联网各厂的笔试题汇总,如果有需要的小伙伴可以关注后私信一下 清隆领取,会在飞书进行同步的跟新。

🎬 01.时间复杂度判断

题目描述

K小姐刚开始学习编程时,经常会遇到时间超限的问题。她希望你能帮忙判断她的程序是否会超时。

已知计算机每秒可以执行 1 0 8 10^8 108 次计算。如果程序的计算次数大于等于 1 0 8 10^8 108,则判定为超时,输出 TLE;否则,请求出最内层循环中代码的计算次数。

输入格式

第一行包含一个正整数 N N N 1 ≤ N ≤ 100 1 \leq N \leq 100 1N100),表示嵌套 for 循环的层数。

第二行包含 N N N 个空格分隔的正整数 M i M_i Mi 1 ≤ M i ≤ 10000 1 \leq M_i \leq 10000 1Mi10000),表示每个 for 循环的重复次数。

输出格式

如果最内层循环的计算次数大于等于 1 0 8 10^8 108,则输出 TLE,否则输出最内层循环的计算次数。

样例输入

3
1000 1000 1000

样例输出

TLE

数据范围

  • 1 ≤ N ≤ 100 1 \leq N \leq 100 1N100
  • 1 ≤ M i ≤ 10000 1 \leq M_i \leq 10000 1Mi10000

题解

本题考察了程序的时间复杂度计算。对于嵌套的 for 循环,最内层循环的计算次数等于所有外层循环的重复次数的乘积。

我们可以先读入循环层数 N N N 以及每层循环的重复次数 M i M_i Mi,然后将所有 M i M_i Mi 相乘,即可得到最内层循环的计算次数。如果计算次数大于等于 1 0 8 10^8 108,则输出 TLE,否则输出计算次数即可。

时间复杂度为 O ( N ) O(N) O(N),空间复杂度为 O ( 1 ) O(1) O(1)

参考代码

  • Python
N = int(input())
M = list(map(int, input().split()))ans = 1
for x in M:ans *= xif ans >= 10**8:print("TLE")exit(0)if ans >= 10**8:print("TLE")
else:print(ans)
  • Java
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int N = sc.nextInt();int[] M = new int[N];for (int i = 0; i < N; i++) {M[i] = sc.nextInt();}long ans = 1;for (int x : M) {ans *= x;if (ans >= 1e8){System.out.println("TLE");System.exit(0);}}if (ans >= 1e8) {System.out.println("TLE");} else {System.out.println(ans);}}
}
  • Cpp
#include <iostream>
using namespace std;int main() {int N;cin >> N;long long ans = 1;for (int i = 0; i < N; i++) {int x;cin >> x;ans *= x;if(ans >= 1e8)return cout << "TLE\n", 0;}if (ans >= 1e8) {cout << "TLE" << endl;} else {cout << ans << endl;}return 0;
}

🎤 02.K小姐的阶乘中的零计数

问题描述

K小姐在做数学作业时,遇到了一个关于阶乘数字的问题。她需要找出一个数 n n n 的阶乘中所有包含的数字0的总数。这并不仅仅是末尾的0,而是整个数中所有出现的0。

输入格式

输入包含一个整数 n n n

输出格式

输出一个整数,表示 n n n 的阶乘中数字0的总数。

样例输入

7

样例输出

2

数据范围

1 ≤ n ≤ 15 1 \leq n \leq 15 1n15

题解

计算一个正整数 n n n 的阶乘,并统计阶乘结果中所有0的数量。考虑到 n n n 的最大值为15,计算阶乘是可行的,因为 15 ! 15! 15! 只有1307674368000

参考代码

  • Python
import sys
input = lambda: sys.stdin.readline().strip()
n = int(input())
factorial = 1
for i in range(1, n + 1):factorial *= i
count_of_zeros = str(factorial).count('0')
print(count_of_zeros)
  • Java
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();long factorial = 1;for (int i = 1; i <= n; i++) {factorial *= i;}String factorialStr = Long.toString(factorial);int countOfZeros = 0;for (char c : factorialStr.toCharArray()) {if (c == '0') {countOfZeros++;}}System.out.println(countOfZeros);scanner.close();}
}
  • Cpp
#include <iostream>int main() {int n;std::cin >> n;long long factorial = 1;for (int i = 1; i <= n; i++) {factorial *= i;}std::string factorialStr = std::to_string(factorial);int countOfZeros = 0;for (char c : factorialStr) {if (c == '0') {countOfZeros++;}}std::cout << countOfZeros << std::endl;return 0;
}

🎧 03.神奇数字

题目描述

LYA 定义了一个神奇数字 n u m num num,其要满足 n u m = a 2 + b 3 + c 4 num = a^2 + b^3 + c^4 num=a2+b3+c4,其中 a , b , c a,b,c a,b,c 都为质数。于是 LYA 想知道在 1 ∼ n 1 \sim n 1n 中有多少个这样的神奇数字呢,请你告诉 LYA。

输入格式

第一行为 t t t,表示有 t t t 组数据。

接下来有 t t t 行,每行为一个整数 n n n

输出格式

输出为 t t t 行,每行为一组答案。

样例输入

3
28
33
47

样例输出

1
2
3

数据范围

  • 1 < t < 1 0 5 1 < t < 10^5 1<t<105
  • 1 ≤ n < 1 0 6 1 \leq n < 10^6 1n<106

题解

本题可以使用预处理 + 二分查找的方法来解决。

首先,预处理出所有可能的神奇数字。由于 a , b , c a,b,c a,b,c 都是质数,我们可以先用埃氏筛法筛选出 1 ∼ 1 0 6 1 \sim 10^6 1106 内的所有质数,存入数组 p r i m e prime prime 中。

然后,我们使用三重循环枚举所有可能的 a , b , c a,b,c a,b,c,计算出对应的神奇数字 v a l val val,并将其加入到集合 s s s 中。注意,为了避免重复计算,我们需要保证 a 2 + b 3 + c 4 < 1 0 6 a^2 + b^3 + c^4 < 10^6 a2+b3+c4<106,虽然有三重循环,但有大量剪枝,总计算次数在 3 × 1 0 5 3 \times 10 ^ 5 3×105 左右。

接下来,将集合 s s s 中的元素转移到数组 v v v 中,并对 v v v 进行排序。

最后,对于每个询问 n n n,我们使用二分查找在数组 v v v 中查找不超过 n n n 的元素个数,即为答案。

时间复杂度 O ( t log ⁡ n ) O(t \log n) O(tlogn),空间复杂度 O ( n ) O(n) O(n)

参考代码

  • Python
import sys
input = lambda: sys.stdin.readline().strip()
import bisectprime = []
N = 10 ** 6 + 1
st = [False] * Nfor i in range(2, N):if not st[i]:prime.append(i)for j in range(i, N, i):st[j] = True v = []
s = set()
n = len(prime)for a in prime:if a * a >= N:breakfor b in prime:if a * a + b ** 3 >= N:breakfor c in prime:val = a ** 2 + b ** 3 + c ** 4if val >= N:breaks.add(val)v = sorted(s)t = int(input())
for _ in range(t):x = int(input())idx = bisect.bisect_right(v, x)print(idx)
  • Java
import java.util.*;public class Main {public static void main(String[] args) {int N = 1000001;boolean[] st = new boolean[N];List<Integer> prime = new ArrayList<>();for (int i = 2; i < N; i++) {if (!st[i]) prime.add(i);for (int j = i; j < N; j += i) st[j] = true;}Set<Long> s = new HashSet<>();int n = prime.size();for (int a : prime) {if ((long) a * a >= N) break;for (int b : prime) {if ((long) a * a + (long) b * b * b >= N) break;for (int c : prime) {long val = (long) a * a + (long) b * b * b + (long) c * c * c * c;if (val >= N) break;s.add(val);}}}List<Long> v = new ArrayList<>(s);Collections.sort(v);Scanner scanner = new Scanner(System.in);int t = scanner.nextInt();int m = v.size();while (t-- > 0) {int x = scanner.nextInt();int L = 0, R = m;while(L < R){int mid = L + R >> 1;if(v.get(mid) > x) R = mid;elseL = mid + 1;}System.out.println(L);}}
}
  • Cpp
#include <iostream>
#include <algorithm>
#include <vector>
#include <unordered_set>
using namespace std;
using ll = long long;const int N = 1e6 + 1;
bool st[N];
vector<int> prime;int main() {for (int i = 2; i < N; i++) {if (!st[i]) prime.push_back(i);for (int j = i; j < N; j += i) st[j] = true;}unordered_set<int> s;int n = prime.size();for (auto a : prime) {if (1ll * a * a >= N) break;for (auto b : prime) {if (1ll * a * a + b * b * b >= N) break;for (auto c : prime) {ll val = 1ll * a * a + b * b * b + c * c * c * c;if (val >= N) break;s.insert(val);}}}vector<int> v(s.begin(), s.end());sort(v.begin(), v.end());int t;cin >> t;while (t--) {int x;cin >> x;int idx = upper_bound(v.begin(), v.end(), x) - v.begin();cout << idx << "\n";}return 0;
}

写在最后

📧 清隆这边最近正在收集近一年互联网各厂的笔试题汇总,如果有需要的小伙伴可以关注后私信一下 清隆领取,会在飞书进行同步的跟新。

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3016084.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

124.反转链表(力扣)

题目描述 代码解决&#xff08;思路1&#xff1a;双指针&#xff09; class Solution { public:ListNode* reverseList(ListNode* head) {ListNode*temp;//保存cur下一个节点ListNode*curhead;ListNode*preNULL;while(cur){tempcur->next;// 保存一下 cur的下一个节点&#…

启英泰伦“离线自然说”技术,让智能语音芯片更善解人意

“以科技创新推动产业创新&#xff0c;特别是以颠覆性技术和前沿技术催生新产业、新模式、新动能&#xff0c;发展新质生产力”。2023年12月&#xff0c;中央经济工作会议强调了发展新质生产力的路径。“科技创新是发展新质生产力的核心要素&#xff0c;这也是我们一直潜心在做…

绘唐ai工具怎么获取

这款产品的最大亮点在于其高度精准的语音克隆能力&#xff0c;利用先进的模型&#xff0c;能够捕捉到用户独特的音调、音高和调制方式&#xff0c;使用户能够以前所未有的方式复制和利用自己的声音。仅需10秒钟的录制时间&#xff0c;即可实现声音的克隆&#xff0c;相当便捷。…

ast-hook的使用

官方githubGitHub - JSREI/ast-hook-for-js-RE: 浏览器内存漫游解决方案&#xff08;探索中...&#xff09; 首先下载项目以及nodejs(不要低于14版本) 下载地址Node.js — Node v16.13.0 (LTS) (nodejs.org) ast-hook建议下载这个版本 新版本会出现hook未定义 进入项目目录…

1-1ARM开发环境搭建(GD32)

1:安装MDK最好是5.27以及以上版本&#xff0c;避免后续学习中出现相关错误 2&#xff1a;安装芯片支持包 双击安装即可&#xff0c;也可以是默认路径&#xff0c;也可以自己更改路径 3&#xff1a;安装jlink下载器驱动&#xff08;下载调试器&#xff09; 具体安装步骤如下所示…

Day23.一刷数据结构算法(C语言版) 39组合总和;40组合总和II;131分割回文串

一、39组合总和 本题是集合里元素可以用无数次&#xff0c;那么和组合问题的差别&#xff0c;其实仅在于对startIndex上的控制 题目链接&#xff1a;组合总和 文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;带你学透回溯算法-组合总和 &#xff08;39.组合总和&#xff…

编译适配纯鸿蒙系统的ijkplayer中的ffmpeg库

目前bilibili官方的ijkplayer播放器&#xff0c;是只适配Android和IOS系统的。而华为接下来即将发布纯harmony系统&#xff0c;是否有基于harmony系统的ijkplayer可以使用呢&#xff1f; 鸿蒙版ijkplayer播放器是哪个&#xff0c;如何使用&#xff0c;这个问题&#xff0c;大家…

【Three.js基础学习】13.Particle

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 前言 课堂知识点 1.粒子 2.PointsMaterial 点材质 &#xff1b; 可以设置点材质的 size 大小 &#xff0c; sizeAttenuation 设置这个可以 可以实现缩放粒子 近处的大 远处小…

学习R语言第五天

文章目录 语法学习创建数据的方式绘制图形的方式图形添加颜色如何操作数据的方式数据进行验算的判断加付值的方式修改变量名称的方式判断是否存在缺失值在计算的方式忽略缺失值通过函数的方式忽略缺失值日期处理的方式字符串转化成日期的方式格式化数据框中数据返回当前的日期的…

k8s 资源文件参数介绍

Kubernetes资源文件yaml参数介绍 yaml 介绍 yaml 是一个类似 XML、JSON 的标记性语言。它强调以数据为中心&#xff0c;并不是以标识语言为重点例如 SpringBoot 的配置文件 application.yml 也是一个 yaml 格式的文件 语法格式 通过缩进表示层级关系不能使用tab进行缩进&am…

环形链表理解||QJ141.环形链表

在链表中&#xff0c;不光只有普通的单链表。之前写过的的一个约瑟夫环形链表是尾直接连向头的。这里的环形链表是从尾节点的next指针连向这链表的任意位置。 那么给定一个链表&#xff0c;判断这个链表是否带环。qj题141.环形链表就是一个这样的题目。 这里的思路是用快慢指…

通过颜色学习css

文章目录 1.生成html2.添加css链接3.将h1标签text-align元素4.添加div标签4.1、为类marker添加元素4.2、添加两个新的div标签4.3、修改div标签的类型并修改css元素4.4、为类container添加元素4.5、以数字形式添加颜色4.5、container添加padding属性4.6、组合css中的颜色属性4.7…

Candance画运算放大器

根据拉扎维《模拟CMOS集成电路设计》第九章第一个放大器进行搭建电路图。 此电路图中两个NMOS栅极互联是因为NMOS的衬底要接片上最低电压。所以要两个互联并接到最低点。 因为两条支路上的器件都是一样的&#xff0c;所以这两条路平分idc的直流电流。 测试的时候要加上下图这两…

工程绘图神器:Origin 2021软件安装与图像demo水印问题解决

目录 引言 正文 01-Origin软件简介 02-Origin软件安装 03-Origin软件复制图像带有水印问题解决 引言 注&#xff1a;本篇软件安装内容引用了微信公众号“软件管家”里的Origin 2021安装教程和…

美业SaaS系统多门店收银系统源码-【分润常见问题】讲解(二)

美业管理系统源码 博弈美业SaaS系统 连锁多门店美业收银系统源码 多门店管理 / 会员管理 / 预约管理 / 排班管理 / 商品管理 / 促销活动 PC管理后台、手机APP、iPad APP、微信小程序 ▶ 分润常见问题&#xff1a; 4、若产品的服务方分润>0&#xff0c;则销售方分润和服…

流畅的python-学习笔记_序列

概念 抽象基类&#xff1a;ABC, Abstract Base Class&#xff0c;ABC还有一个概念&#xff0c;是一个编程语言 序列 内置序列类型 分类 可分为容器类型和扁平类型 容器类型有list&#xff0c; tuple&#xff0c; collections.deque等&#xff0c;存储元素类型可不同&…

8W 1.5KVDC 隔离宽电压输入 DC/DC 电源模块——TP08DA 系列

TP08DA系列电源模块额定输出功率为8W&#xff0c;外形尺寸为31.80*20.30*10.00&#xff0c;应用于2&#xff1a;1&#xff0c;4:1电压输入范围 9-18V,18-36V,36-72V9V-36V和18V-72VDC的输入电压环境&#xff0c;输出电压精度可达1%&#xff0c;具有输出短路保护等功能&#xff…

pynq7020系列的资源有多少

pynq系列的资源有多少 对比 查找表107&#xff0c;273 39.14 140&#xff0c;537 51.28查找表随机存储器17&#xff0c;457 12.12 19&#xff0c;524 13.56触发器67&#xff0c;278 12.27 81&#xff0c;453 14.95 Block RAMs ( 36 KB ) 264.5 29.00 457 50.11 Table 1: Zynq-…

甲小姐对话柳钢:CEO对股东最大的责任,是对成功的概率负责|甲子光年

只有看见最微小的事物&#xff0c;才能洞悉伟大的定律。 来源&#xff5c;甲子光年 作者&#xff5c;甲小姐 刘杨楠 编辑&#xff5c;栗子 商业史上&#xff0c;职业经理人成为“空降CEO”的故事往往胜少败多。 “究其原因有三条——容易自嗨、喊口号&#xff1b;不顾公司历…

【start和run的区别(面试题)及创建线程的五种写法】

线程 1.start和run的区别2.创建线程的五种写法1.继承Thread,重写run2.实现runnable&#xff0c;重写run3.继承Thread,重写run,使用匿名内部类4.实现Runnable,重写run,使用匿名内部类5.使用lambda表达式 1.start和run的区别 1.start方法内部&#xff0c;是会调用到系统api&…