【秋招突围】2024届秋招-科大讯飞笔试题-第一套

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

✨ 本系计划跟新各公司春秋招的笔试题

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

📖 写在前面

夏天来了 秋招还会远吗?

前不久 春招 也算是圆满结束咯,大家有拿到心仪的 offer吗? 最近的秋招提前批已经来啦,秋招的简历投递也部分已经开始了,小伙伴们做好准备了吗? 本次给大家带来24届秋招 科大讯飞 的笔试题目三语言解析(Java/Python/Cpp)

alt

🎀 01.矩阵转置差值

问题描述

K小姐是一位数学爱好者,她对矩阵运算很感兴趣。最近她想到了一种新的矩阵运算方式,定义为矩阵转置差值,即矩阵中每个元素与其在转置矩阵中对应位置上元素的差的绝对值之和。

例如,对于矩阵:

其转置矩阵为:

那么原矩阵的转置差值为

现在,K小姐拿到了一个 的矩阵,希望你能帮她计算出该矩阵的转置差值。

输入格式

第一行包含一个正整数 ,表示矩阵的规模。

接下来 行,每行包含 个空格分隔的正整数,表示矩阵中的元素。

输出格式

输出一个整数,表示该矩阵的转置差值。

样例输入

2
4 3
2 1

样例输出

2

数据范围

其中 表示矩阵中第 行第 列的元素。

题解

本题可以直接按照矩阵转置差值的定义来计算答案。我们只需要遍历矩阵的每个元素,计算其与转置矩阵中对应位置上元素的差的绝对值,然后将所有差值相加即可得到最终答案。

具体实现时,我们可以使用两重循环遍历矩阵,对于矩阵中的每个元素 ,将其与转置矩阵中对应位置上的元素 的差的绝对值累加到答案中。这样遍历完整个矩阵后,就可以得到矩阵的转置差值了。

时间复杂度为 ,空间复杂度为 。其中 是矩阵的规模。

参考代码

  • Python
n = int(input())
matrix = [list(map(int, input().split())) for _ in range(n)]

ans = 0
for i in range(n):
    for j in range(n):
        ans += abs(matrix[i][j] - matrix[j][i])

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[][] matrix = new int[n][n];
        
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                matrix[i][j] = sc.nextInt();
            }
        }
        
        int ans = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                ans += Math.abs(matrix[i][j] - matrix[j][i]);
            }
        }
        
        System.out.println(ans);
    }
}
  • Cpp
#include <iostream>
#include <cmath>
using namespace std;

int main() {
    int n;
    cin >> n;
    int matrix[500][500];
    
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> matrix[i][j];
        }
    }
    
    int ans = 0;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            ans += abs(matrix[i][j] - matrix[j][i]);
        }
    }
    
    cout << ans << endl;
    
    return 0;
}

⏰ 02.K小姐的闹钟计划

问题描述

K小姐是一个非常注重时间管理的人,为了确保自己能够准时起床,她设置了 个闹钟。某天早上,当K小姐醒来时,她看了一下当前的时间,想知道下一个闹钟会在什么时候响起,以免被吓到。

输入格式

第一行按照 的格式输入两个数字,表示当前的时间。

第二行输入一个正整数 ,表示K小姐设置的闹钟数量()。

接下来的 行,每行按照 的格式输入两个数字,表示设置的闹钟时间。

对于所有的 ,所有的时间保证是 的形式,且一定在 之间。数据保证同一天内一定有一个还没响的闹钟。

输出格式

按照 的格式输出一个时间,表示下一次闹钟响起的时间。

样例输入

12:00
3
06:00
13:00
23:59

样例输出

13:00

数据范围

题解

这道题目可以通过以下步骤解决:

  1. 将当前时间转换为分钟数 ,即
  2. 遍历所有闹钟时间,对于每个闹钟时间:
    • 将闹钟时间转换为分钟数
    • 如果 ,计算时间差
    • 如果 比当前的最小时间差 还要小,更新 和对应的闹钟时间
  3. 输出 ,即为下一次闹钟响起的时间。

时间复杂度为 ,空间复杂度为

参考代码

  • Python
def convertToMinutes(time):
    h, m = map(int, time.split(':'))
    return h * 60 + m

currentTime = input()
n = int(input())

nowTime = convertToMinutes(currentTime)
minGap = float('inf')
result = ""

for _ in range(n):
    alarmTime = input()
    alarm = convertToMinutes(alarmTime)
    if alarm > nowTime:
        gap = alarm - nowTime
        if gap < minGap:
            minGap = gap
            result = alarmTime

print(result)
  • Java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String currentTime = scanner.nextLine();
        int n = scanner.nextInt();
        scanner.nextLine(); // 消耗换行符

        int nowTime = convertToMinutes(currentTime);
        int minGap = Integer.MAX_VALUE;
        String result = "";

        for (int i = 0; i < n; i++) {
            String alarmTime = scanner.nextLine();
            int alarm = convertToMinutes(alarmTime);
            if (alarm > nowTime) {
                int gap = alarm - nowTime

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

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

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

全部评论

相关推荐

2 5 评论
分享
牛客网
牛客企业服务