所有题目均有五种语言实现。C实现目录、C++ 实现目录、Python实现目录、Java实现目录、JavaScript实现目录
题目
一个文件目录的数据格式为: 目录id,本目录中文件大小,(子目录id列表)其中目录id全局唯一,取值范围[1,200],本目录中文件大小范围[1,1000],子目录id列表个数[0,10]
例如 : 1 20 (2,3)表示目录1中文件总大小是20,有两人子目录,id分别是2和3
现在输入一个文件系统中所有日录信息,以及待查询的目录id,返回这个目录和及该目录所有子目录的大小之和
输入描述
第一行为两个数字M,N,分别表示目录的个数和待查询的目录id.
1≤M≤100
1≤N≤200
接下来M行,每行为1个目录的数据
目录id 本目录中文件大小(子目录id列表)
子目录列表中的子目录id以逗号分隔输出描述
待查询目录及其子目录的大小之和
示例1:输入
3 1
3 15 (0)
1 20 (2)
2 10 (3)
输出45
说明
目录1大小为20,包含一个子目录2(大小为10),子目录2包含人子目录3(大小为15),总的大小为20+10+15=45示例2:
输入
4 2
4 20 ()
5 30 ()
2 10 (4,5)
1 40 ()
输出60
说明
目录2包含2个子目录4和5,总的大小为10+20+30 = 60
思路
1:目录之间的关系其实就是树结构,返回这个目录和及该目录所有子目录的大小之和,其实就是求当前节点及其所有子节点的值之和。一个DFS解决问题。
Code
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NODES 10000 // 假设最大节点数
// 关系存储结构
typedef struct {
int children[MAX_NODES]; // 存储子节点编号
int child_count; // 子节点个数
} NodeRelation;
NodeRelation relations[MAX_NODES]; // 关系映射
int relation_keys[MAX_NODES]; // 存储节点权重
int queue[MAX_NODES]; // BFS 队列
int front = 0, rear = 0; // 队列指针
void enqueue(int val) {
queue[rear++] = val;
}
int dequeue() {
return queue[front++];
}
int is_empty() {
return front == rear;
}
int main() {
int m, n;
scanf("%d %d", &m, &n);
// 初始化结构体数组
for (int i = 0; i < MAX_NODES; i++) {
relations[i].child_count = 0;
relation_keys[i] = 0;
}
// 读取 m 组关系
for (int i = 0; i < m; i++) {
int parent, value;
char children_str[1000]; // 假设输入不会超过 1000 字符
scanf("%d %d %s", &parent, &value, children_str);
relation_keys[parent] = value; // 记录节点权重
// 解析子节点
if (strlen(children_str) > 2) { // 子节点存在
char *token = strtok(children_str + 1, ","); // 去掉前导 '['
while (token != NULL) {
int child = atoi(token);
relations[parent].children[relations[parent].child_count++] = child;
token = strtok(NULL, ",");
}
}
}
// BFS 遍历
int total_value = 0;
enqueue(n);
while (!is_empty()) {
int node = dequeue();
total_value += relation_keys[node];
for (int i = 0; i < relations[node].child_count; i++) {
enqueue(relations[node].children[i]);
}
}
printf("%d\n", total_value);
return 0;
}
要求
时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++262144K,其他语言524288K
64bit IO Format:%lld
语言限定:
C(clang11), C++(clang++11), Pascal(fpc 3.0.2), Java(javac 1.8), Python2(2.7.3),
PHP(7.4.7), C#(mcs5.4), ObjC(gcc 5.4), Pythen3(3.9), JavaScript Node(12.18.2), JavaScript V8(6.0.0),
Sqlite(3.7.9), R(4.0.3), Go(1.14.4), Ruby(2.7.1), Swift(5.3), matlab(Octave 5.2), Pypy2(pypy2.7.13),
Pypy3(pypy3.6.1), Rust(1.44), Scala(2.11.12), Kotlin(1.4.10), Groovy(3.0.6), TypeScript(4.1.2), Mysql(8.0)
更多题目链接:
华为OD 2025 最新最全机试题库及讲解,A+B+C+D+E卷题库大全。
Java题库: 2024华为OD机试(JAVA)真题【E卷+A卷+B卷+C卷+D卷】目录_华为od机试真题-CSDN博客
Python题库: 2024华为OD机试(Python)真题【E卷+A卷+B卷+C卷+D卷】目录_华为od机试好过吗-CSDN博客
C++题库: 2024华为OD机试(C++)真题【E卷+A卷+B卷+C卷+D卷】目录_华为od怎么知道考的是a卷还是b卷-CSDN博客
Js题库: 2024 华为OD机试(JavaScript)真题【E卷+A卷+B卷+C卷+D卷】目录_华为od 2023 q2b卷-CSDN博客