2024届-科大XF改编题-第一套
💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历
👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸
✨ 笔试合集传送们 -> 🧷学长刷题笔记
🍒 本专栏已收集
140+
套题 🍄 题面描述等均已改编,如果和你实际看到的题面描述不一样请理解,做法和题目本质基本不变。🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力 💞
🎀 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
数据范围
题解
这道题目可以通过以下步骤解决:
- 将当前时间转换为分钟数
,即
。
- 遍历所有闹钟时间,对于每个闹钟时间:
- 将闹钟时间转换为分钟数
。
- 如果
,计算时间差
。
- 如果
比当前的最小时间差
还要小,更新
和对应的闹钟时间
。
- 将闹钟时间转换为分钟数
- 输出
,即为下一次闹钟响起的时间。
时间复杂度为 ,空间复杂度为
。
参考代码
- 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%内容,订阅专栏后可继续查看/也可单篇购买
本专栏短期内不再更新,请勿继续订阅