【春招笔试】2024-05-07-阿里文娱-三语言题解
🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员
✨ 本系列打算持续跟新阿里文娱近期的春秋招笔试题汇总~
👏 感谢大家的订阅➕ 和 喜欢💗
✨ 笔试合集传送们 -> 🧷春秋招笔试合集
🎬 01.时间复杂度判断
题目描述
K小姐刚开始学习编程时,经常会遇到时间超限的问题。她希望你能帮忙判断她的程序是否会超时。
已知计算机每秒可以执行 次计算。如果程序的计算次数大于等于 ,则判定为超时,输出 TLE
;否则,请求出最内层循环中代码的计算次数。
输入格式
第一行包含一个正整数 (),表示嵌套 for
循环的层数。
第二行包含 个空格分隔的正整数 (),表示每个 for
循环的重复次数。
输出格式
如果最内层循环的计算次数大于等于 ,则输出 TLE
,否则输出最内层循环的计算次数。
样例输入
3
1000 1000 1000
样例输出
TLE
数据范围
题解
本题考察了程序的时间复杂度计算。对于嵌套的 for
循环,最内层循环的计算次数等于所有外层循环的重复次数的乘积。
我们可以先读入循环层数 以及每层循环的重复次数 ,然后将所有 相乘,即可得到最内层循环的计算次数。如果计算次数大于等于 ,则输出 TLE
,否则输出计算次数即可。
时间复杂度为 ,空间复杂度为 。
参考代码
- Python
N = int(input())
M = list(map(int, input().split()))
ans = 1
for x in M:
ans *= x
if 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小姐在做数学作业时,遇到了一个关于阶乘数字的问题。她需要找出一个数 的阶乘中所有包含的数字0的总数。这并不仅仅是末尾的0,而是整个数中所有出现的0。
输入格式
输入包含一个整数 。
输出格式
输出一个整数,表示 的阶乘中数字0的总数。
样例输入
7
样例输出
2
数据范围
题解
计算一个正整数 的阶乘,并统计阶乘结果中所有0的数量。考虑到 的最大值为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++;
}
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
学长刷题笔记 文章被收录于专栏
这里收集了超全的刷题笔记,欢迎大家的订阅,会持续跟新的