2025华为od机试真题A卷【文件目录大小】C语言实现

         所有题目均有五种语言实现。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博客

C语言题库: 2024 华为OD机试(C语言)真题【E卷+A卷+B卷+C卷+D卷】目录-CSDN博客

面试手撕题库: 2024华为OD面试手撕代码真题目录_华为od手撕代码-CSDN博客

猜你喜欢

转载自blog.csdn.net/misayaaaaa/article/details/146161548
今日推荐