华为OD机试 - 开源项目热度榜单(Python/JS/C/C++ 2024 E卷 100分)

news2024/11/16 3:14:31

在这里插入图片描述

华为OD机试 2024E卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

某个开源社区希望将最近热度比较高的开源项目出一个榜单,推荐给社区里面的开发者。对于每个开源项目,开发者可以进行关注(watch)、收藏(star)、fork、提issue、提交合并请求(MR)等。

数据库里面统计了每个开源项目关注、收藏、fork、issue、MR的数量,开源项目的热度根据这5个维度的加权求和进行排序。

H = Wwatch X#watch + Wstar X#star +Wfork X#fork +Wissue X#issue +Wmr X#mr H表示热度值,Wwatch、Wstar、Wfork、Wissue、Wmr分别表示5个统计维度的权重,#watch、#star、#fork、#issue、#mr分别表示5个统计维度的统计值。

榜单按照热度值降序排序,对于热度值相等的,按照项目名字转换为全小写字母后的字典序排序(‘a’,‘b’,‘c’,…,‘x’,‘y’,‘z’)。

二、输入描述

第一行输入为N,表示开源项目的个数,0<N<=100。

第二行输入为权重值列表,一共5个整型值,分别对应关注、收藏、fork、issue、MR的权重,权重取值0<W<=50。

第三行开始接下来的N行为开源项目的统计维度,每一行的格式为:

name nr_watch nr_star nr_fork nr_issue nr_mr

其中name为开源项目的名字,由英文字母组成,长度<=50,其余5个整型值分别为该开源项目关注、收藏、fork、issue、MR的数量,数量取值0<nr<=1000。

三、输出描述

按照热度降序,输出开源项目的名字,对于热度值相等的,按照项目名字转换为全小写字母后的字典序排序(‘a’>‘b’>‘c’>…>‘x’>‘y’>‘z’)。

四、测试用例

测试用例1:

1、输入

4
8 6 2 8 6
camila 66 70 46 158 80
victoria 94 76 86 189 211
anthony 29 17 83 21 48
emily 53 97 1 19 218

2、输出

victoria
camila
emily
anthony

3、说明

排序热度值计算:

camila: 668 + 706 + 462 + 1588 + 80*6 = 2784

victoria: 948 + 766 + 862 + 1898 + 211*6 = 4158

anthony: 298 + 176 + 832 + 218 + 48*6 = 956

emily: 538 + 976 + 12 + 198 + 218*6 = 2468

根据热度值降序,得到结果。

测试用例2:

1、输入

5
5 6 6 1 2
camila 13 88 46 26 169
grace 64 38 87 23 103
lucas 91 79 98 154 79
leo 29 27 36 43 178
ava 29 27 36 43 178

2、输出

lucas
grace
camila
ava
leo

3、说明

排序热度值计算:

camila: 135 + 886 + 466 + 261 + 169*2 = 1233

grace: 645 + 386 + 876 + 231 + 103*2 = 1299

lucas: 915 + 796 + 986 + 1541 + 79*2 = 1829

leo: 295 + 276 + 366 + 431 + 178*2 = 922

ava: 295 + 276 + 366 + 431 + 178*2 = 922

根据热度值降序,对于leo和ava,热度值相等,按照字典序,ava排在leo前面,得到结果。

五、解题思路

  1. 读取项目数量 N 和权重值列表,读取每个开源项目的统计数据,包括项目名称和五个统计维度的数量。
  2. 根据给定的权重和统计数据计算每个项目的热度值。
  3. 按照热度值降序排序。
  4. 如果热度值相等,按项目名称的小写字母字典序排序。
  5. 按照排序结果输出项目名称。

六、Python算法源码

class OpenSourceProject:
    def __init__(self, name, watch, star, fork, issue, mr):
        self.name = name
        self.watch = watch
        self.star = star
        self.fork = fork
        self.issue = issue
        self.mr = mr
        self.heat = 0

    # 计算热度值
    def calculate_heat(self, weights):
        self.heat = (weights[0] * self.watch +
                     weights[1] * self.star +
                     weights[2] * self.fork +
                     weights[3] * self.issue +
                     weights[4] * self.mr)


def main():
    # 读取项目数量
    n = int(input("Enter number of projects: "))

    # 读取权重值
    weights = list(map(int, input("Enter weights: ").split()))

    # 存储所有项目
    projects = []

    # 读取每个项目的统计数据
    for _ in range(n):
        data = input("Enter project data: ").split()
        name = data[0]
        watch = int(data[1])
        star = int(data[2])
        fork = int(data[3])
        issue = int(data[4])
        mr = int(data[5])

        project = OpenSourceProject(name, watch, star, fork, issue, mr)
        project.calculate_heat(weights)
        projects.append(project)

    # 排序项目
    projects.sort(key=lambda p: (-p.heat, p.name.lower()))

    # 输出排序后的项目名称
    for project in projects:
        print(project.name)


if __name__ == "__main__":
    main()

七、JavaScript算法源码

class OpenSourceProject {
    constructor(name, watch, star, fork, issue, mr) {
        this.name = name;
        this.watch = watch;
        this.star = star;
        this.fork = fork;
        this.issue = issue;
        this.mr = mr;
        this.heat = 0;
    }

    // 计算热度值
    calculateHeat(weights) {
        this.heat = weights[0] * this.watch +
                    weights[1] * this.star +
                    weights[2] * this.fork +
                    weights[3] * this.issue +
                    weights[4] * this.mr;
    }
}

function main() {
    const readline = require('readline-sync');

    // 读取项目数量
    const n = parseInt(readline.question("Enter number of projects: "));

    // 读取权重值
    const weights = readline.question("Enter weights: ").split(" ").map(Number);

    // 存储所有项目
    const projects = [];

    // 读取每个项目的统计数据
    for (let i = 0; i < n; i++) {
        const data = readline.question("Enter project data (name watch star fork issue mr): ").split(" ");
        const name = data[0];
        const watch = parseInt(data[1]);
        const star = parseInt(data[2]);
        const fork = parseInt(data[3]);
        const issue = parseInt(data[4]);
        const mr = parseInt(data[5]);

        const project = new OpenSourceProject(name, watch, star, fork, issue, mr);
        project.calculateHeat(weights);
        projects.push(project);
    }

    // 排序项目
    projects.sort((p1, p2) => {
        if (p2.heat !== p1.heat) {
            return p2.heat - p1.heat; // 按热度降序排序
        } else {
            return p1.name.toLowerCase().localeCompare(p2.name.toLowerCase()); // 若热度相同则按名称字典顺序排序
        }
    });

    // 输出排序后的项目名称
    console.log("Sorted projects:");
    projects.forEach(project => console.log(project.name));
}

main();

八、C算法源码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 定义开源项目结构体
typedef struct {
    char name[100];
    int watch;
    int star;
    int fork;
    int issue;
    int mr;
    int heat;  // 热度值
} OpenSourceProject;

// 计算热度值的函数
void calculateHeat(OpenSourceProject* project, int weights[]) {
    project->heat = weights[0] * project->watch +
                    weights[1] * project->star +
                    weights[2] * project->fork +
                    weights[3] * project->issue +
                    weights[4] * project->mr;
}

// 自定义比较函数,用于 qsort
int compareProjects(const void* a, const void* b) {
    OpenSourceProject* p1 = (OpenSourceProject*)a;
    OpenSourceProject* p2 = (OpenSourceProject*)b;

    // 先按热度值降序排列
    if (p1->heat != p2->heat) {
        return p2->heat - p1->heat;  // 按热度降序排列
    }

    // 如果热度相同,按名称字典顺序排列(忽略大小写)
    return strcasecmp(p1->name, p2->name);
}

int main() {
    int n;
    int weights[5];

    // 读取项目数量
    printf("Enter number of projects: ");
    scanf("%d", &n);

    // 读取权重值
    printf("Enter weights: ");
    for (int i = 0; i < 5; i++) {
        scanf("%d", &weights[i]);
    }

    // 动态分配存储所有项目的数组
    OpenSourceProject* projects = (OpenSourceProject*)malloc(n * sizeof(OpenSourceProject));

    // 读取每个项目的统计数据
    for (int i = 0; i < n; i++) {
        printf("Enter project data (name watch star fork issue mr): ");
        scanf("%s %d %d %d %d %d",
              projects[i].name,
              &projects[i].watch,
              &projects[i].star,
              &projects[i].fork,
              &projects[i].issue,
              &projects[i].mr);

        // 计算每个项目的热度值
        calculateHeat(&projects[i], weights);
    }

    // 排序项目
    qsort(projects, n, sizeof(OpenSourceProject), compareProjects);

    // 输出排序后的项目名称
    printf("Sorted projects:\n");
    for (int i = 0; i < n; i++) {
        printf("%s\n", projects[i].name);
    }

    // 释放动态分配的内存
    free(projects);

    return 0;
}

九、C++算法源码

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

// 定义开源项目类
class OpenSourceProject {
public:
    string name;
    int watch, star, fork, issue, mr, heat;

    // 构造函数
    OpenSourceProject(string name, int watch, int star, int fork, int issue, int mr) {
        this->name = name;
        this->watch = watch;
        this->star = star;
        this->fork = fork;
        this->issue = issue;
        this->mr = mr;
        this->heat = 0;
    }

    // 计算热度值的函数
    void calculateHeat(const vector<int>& weights) {
        this->heat = weights[0] * this->watch +
                     weights[1] * this->star +
                     weights[2] * this->fork +
                     weights[3] * this->issue +
                     weights[4] * this->mr;
    }
};

// 自定义比较函数,用于 std::sort
bool compareProjects(const OpenSourceProject& p1, const OpenSourceProject& p2) {
    if (p1.heat != p2.heat) {
        return p1.heat > p2.heat; // 按热度值降序排序
    }
    return p1.name < p2.name; // 若热度相同,按名称字典顺序升序排序
}

int main() {
    int n;
    vector<int> weights(5);

    // 读取项目数量
    cout << "Enter number of projects: ";
    cin >> n;

    // 读取权重值
    cout << "Enter weights: ";
    for (int i = 0; i < 5; i++) {
        cin >> weights[i];
    }

    // 存储所有项目
    vector<OpenSourceProject> projects;

    // 读取每个项目的统计数据
    for (int i = 0; i < n; i++) {
        string name;
        int watch, star, fork, issue, mr;
        cout << "Enter project data (name watch star fork issue mr): ";
        cin >> name >> watch >> star >> fork >> issue >> mr;

        OpenSourceProject project(name, watch, star, fork, issue, mr);
        project.calculateHeat(weights); // 计算热度值
        projects.push_back(project); // 添加到项目列表中
    }

    // 排序项目
    sort(projects.begin(), projects.end(), compareProjects);

    // 输出排序后的项目名称
    cout << "Sorted projects:\n";
    for (const auto& project : projects) {
        cout << project.name << endl;
    }

    return 0;
}

🏆下一篇:华为OD机试真题 - 简易内存池(Python/JS/C/C++ 2024 E卷 200分)

🏆本文收录于,华为OD机试真题(Python/JS/C/C++)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2133963.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Echarts】使用多横坐标轴展示近十五天天气预报

现在手机都有天气app,使用echarts展示十五天天气预报的需要你遇到过这样离大谱的需求吗&#xff1f;如果没有或许你能从中找到些许思路。 效果 看效果是不是有点那么个意思,开局一张图,代码全靠ctrl c。不多说上代码。 vue模板引擎代码 <template><div ref"xA…

2024122读书笔记|《人生歪理,歪的很有道理》——生活奇奇怪怪,你要可可爱爱

2024122读书笔记|《人生歪理&#xff0c;歪的很有道理》——生活奇奇怪怪&#xff0c;你要可可爱爱 偶然邂逅的一本书&#xff0c;很可爱治愈的一本书&#xff0c;多嘴鸭我更愿意叫它大鹅&#xff0c;是的就是铁锅炖大鹅的那个大鹅&#x1f60d;&#x1f60d;&#x1f929;&…

python清除一个月以前的ES索引文档数据

python清除一个月以前的ES索引文档数据 先查看一下mysql 数据&#xff0c;看一下那一列是日期字段看到是 edittime 列以下是 python 脚本 vim delete_old_noticeresult.py import datetime from elasticsearch import Elasticsearch, RequestError import logging# 配置日志 …

《C++》解密--顺序表

一、线性表 线性表是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈...... 线性表在【逻辑上】是线性结构…

构建“零工市场小程序”,服务灵活就业“大民生”

如今&#xff0c;灵活就业已成为现代劳动力市场的重要组成部分。然而&#xff0c;这一就业形态也面临着信息不对称、匹配效率低下等一系列挑战。为有效解决这些问题&#xff0c;构建一个高效、便捷的“零工市场小程序”显得尤为重要。 二、零工市场现状与挑战 市场规模与增长趋…

单调队列的实现

这是C算法基础-数据结构专栏的第二十五篇文章&#xff0c;专栏详情请见此处。 引入 单调队列就是满足单调性的队列&#xff0c;它最经典的应用就是给定一个序列和一个窗口&#xff0c;使窗口在序列中从前向后滑动&#xff0c;求出窗口在每个位置时&#xff0c;其中元素的最大/小…

DC_(n)Xyz

intra-band contiguous EN-DC 配置需要通过DC_(n)Xyz表示&#xff0c;其中第一个字母y表示contiguous E-UTRA carriers数量&#xff0c;第二个字母z表示contiguous NR carrier数量&#xff0c;而(n)X 就代表 E-UTRA band X 和NR band nX这个组合。上图38.101-3 Table 5.3B.0-1 …

Unity同时启动多个Editor

HardLinkShellExt tool https://schinagl.priv.at/nt/hardlinkshellext/linkshellextension.html 作用&#xff1a; 1.网络Online项目方便调试&#xff0c;MMO项目 2.方便发布不同平台的包&#xff0c;快速开发测试 使用方法&#xff1a;

网络药理学:2、文章基本思路、各个数据库汇总与比对、其他相关资料(推荐复现的文章、推荐学习视频、论文基本框架、文献基本知识及知网检索入门)

一、文章基本思路&#xff08;待更&#xff09; 一篇不含分子对接和实验的纯网络药理学文章思路如下&#xff1a; 即如下&#xff1a; 二、 各个数据库&#xff08;待更&#xff09; 三、其他相关资料 1.推荐复现的文章 纯网络药理学分子对接&#xff1a;知网&#xff1…

Java 每日一刊(第6期):整数运算

文章目录 前言Java 的整数类型基本的整数运算符整数除法与取模自增与自减运算整数的进制表示整数溢出问题位运算整数的优化技巧类型自动提升&#xff08;Type Promotion&#xff09;强制类型转换&#xff08;Type Casting&#xff09;本期小知识 在有限的符号中&#xff0c;我们…

【开放词汇检测】基于MMDetection的MM-Grounding-DINO实战

文章目录 摘要安装基础环境新建虚拟环境安装pytorch安装openmim、mmengine、mmcv安装 MMDetection验证安装配置OV-DINO环境 MMDetection的MM-Grounding-DINO详细介绍测试结果Zero-Shot COCO 结果与模型Zero-Shot LVIS ResultsZero-Shot ODinW&#xff08;野生环境下的目标检测&…

Android视频编辑:利用FFmpeg实现高级功能

在移动设备上进行视频编辑的需求日益增长&#xff0c;用户期望能够在智能手机或平板电脑上轻松地编辑视频&#xff0c;以满足社交媒体分享或个人存档的需求。Android平台因其广泛的用户基础和开放的生态系统&#xff0c;成为视频编辑应用的理想选择。FFmpeg&#xff0c;作为一个…

Centos7安装MySql(特详细)

文章目录 前言一、mysql下载1.打开mysql官网&#xff0c;找到download2.打开MySQL Community(GPL) Downloads3.打开MySql Community Server4.打开Archives5.下载 二、安装1.文件上传2.文件解压3.配置文件4.添加环境变量5.初始化6.启动7.登录并修改密码8.允许远程连接 前言 每次…

【人工智能】OpenAI发布GPT-o1模型:推理能力的革命性突破,这将再次刷新编程领域的格局!

在人工智能领域&#xff0c;推理能力的提升一直是研究者们追求的目标。就在两天前&#xff0c;OpenAI正式发布了其首款具有推理能力的大语言模型——o1。这款模型的推出&#xff0c;不仅标志着AI技术的又一次飞跃&#xff0c;也为开发者和用户提供了全新的工具来解决复杂问题。…

51单片机快速入门之独立按键

51单片机快速入门之独立按键 这里我们需要用上一个仿真软件,只因不想硬件焊接:PROTEUS DESIGN SUITE PROTEUS DESIGN SUITE: PROTEUS DESIGN SUITE是一款由LabCenter Electronics开发的电子设计自动化&#xff08;EDA&#xff09;软件&#xff0c;广泛应用于电气工程和电子工…

debian服务器上搭建git服务及添加文件提交拉取的操作记录、在Ubuntu上搭建Jenkins服务以及Ubuntu中的PPA源及PPA的安装使用

一、debian服务器上搭建git服务及添加文件提交拉取的操作记录 需要新建一个代码仓库&#xff0c;准备找台业务量不大的服务器上找个空间大的文件夹搭建一个。整个过程&#xff1a; 1&#xff0c;在服务器端安装git服务&#xff0c;新建git用户并设置密码&#xff0c;创建仓库&a…

深度学习-神经网络

文章目录 一、基本组成单元&#xff1a;神经元二、神经网络层三、偏置与权重四、激活函数1.激活函数的作用2.常见的激活函数1).Sigmoid2).Tanh函数3).ReLU函数 五、优点与缺点六、总结 神经网络&#xff08;Neural Network, NN&#xff09;是一种模拟人类大脑工作方式的计算模型…

北大阿里:新出炉的LLM偏好对齐方法综述

最近大家都聚集在 Open AI 新的&#x1f353;o1发布和 self-play RL 的共识上。 我想不管是草莓、self-play RL还是数据合成下的new scaling law&#xff0c;也不论这条路是否能够最终走通&#xff0c;仅对于当下以及未来LLM在偏好对齐来说&#xff0c;如文中所述&#xff0c;相…

C语言 | Leetcode C语言题解之第402题移掉K位数字

题目&#xff1a; 题解&#xff1a; char* removeKdigits(char* num, int k) {int n strlen(num), top 0;char* stk malloc(sizeof(char) * (n 1));for (int i 0; i < n; i) {while (top > 0 && stk[top] > num[i] && k) {top--, k--;}stk[top]…

【SSRF漏洞】——http协议常见绕过

改变的确很难&#xff0c;但结果值得冒险 本文如有错误之处&#xff0c;还请各位师傅指正 一.ssrf概述 SSRF全称为Server-side Request Fogery,中文含义服务器端请求伪造 SSRF是一种由攻击者构造形成由目标服务端发起请求的一个安全漏洞。一般情况下&#xff0c;SSRF攻击的目标…