2024ali文娱第一套-三语言题解
💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历
👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸
✨ 笔试合集传送们 -> 🧷学长刷题笔记
🍒 本专栏已收集
140+
套题 🍄 题面描述等均已改编,如果和你实际看到的题面描述不一样请理解,做法和题目本质基本不变。🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力 💞
🎬 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') {
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏短期内不再更新,请勿继续订阅