【春招笔试】2024-05-07-阿里文娱-三语言题解

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

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

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

✨ 笔试合集传送们 -> 🧷春秋招笔试合集

🎬 01.时间复杂度判断

题目描述

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

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

输入格式

alt 第一行包含一个正整数 ),表示嵌套 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%内容,订阅专栏后可继续查看/也可单篇购买

学长刷题笔记 文章被收录于专栏

这里收集了超全的刷题笔记,欢迎大家的订阅,会持续跟新的

全部评论
真的是阿里的吗
点赞 回复 分享
发布于 06-15 22:39 四川

相关推荐

狠赚笔第一人:学计算机自己不努力怪大环境?我大一就拿到了美团大厂的offer,好好看看自己有没有努力查看图片
点赞 评论 收藏
分享
2 4 评论
分享
牛客网
牛客企业服务