当前位置: 首页 > news >正文

开源项目热度榜单

题目描述

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

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

H = (Wwatch * #watch) + (Wstar * #star) + (Wfork * #fork) +  (Wissue * #issue) + (Wmr * #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_start nr_fork nr_issue nr_mr

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

输出描述

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

用例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

输出

victoria
camila
emily
anthony

说明

排序热度值计算:
camila: 668 + 706 + 462 + 1588 + 806 = 2784
victoria: 94
8 + 766 + 862 + 1898 + 2116 = 4158
anthony: 298 + 176 + 832 + 218 + 486 = 956
emily: 53
8 + 976 + 12 + 198 + 2186 = 2468

用例2

输入

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

输出

lucas
grace
camila
ava
leo

说明

排序热度值计算:
camila: 135 + 886 + 466 + 261 + 1692 = 1233
grace: 64
5 + 386 + 876 + 231 + 1032 = 1299
lucas: 915 + 796 + 986 + 1541 + 792 = 1829
leo: 29
5 + 276 + 366 + 431 + 1782 = 922
ava: 295 + 276 + 366 + 431 + 178*2 = 922

代码

// 引入必要的头文件,用于输入输出和字符串处理
#include <stdio.h>
#include <stdlib.h>
#include <string.h>// 定义项目结构体,包含项目名和热度值
typedef struct {char name[50]; // 项目名字,由英文字母组成,长度不超过50int h;        // 项目热度值
} project;// 自定义排序函数,用于qsort进行排序,根据热度值降序及名字字典序升序排列
int cmp(const void *a, const void *b) {// 将void指针类型转换为project结构体指针project *A = (project *)a;project *B = (project *)b;// 如果两个项目的热度值不相等,则按照热度值降序排列if (A->h != B->h) {return B->h - A->h; // 返回差值,使大热度值的项目排在前面} // 若热度值相等,则按照项目名字全小写后的字典序升序排列else {return strcmp(A->name, B->name); // 使用strcmp比较字符串,返回负数、零或正数,以实现升序排序}
}int main() {// 读取开源项目个数nint n;scanf("%d", &n);// 初始化权重数组weight,存储5个维度的权重值int weight[5];for (int i = 0; i < 5; i++) {scanf("%d", &weight[i]); // 读取每个维度的权重值}// 初始化项目结构体数组p,存储所有开源项目的相关信息project p[n];// 遍历所有项目,读取并计算每个项目的热度值for (int i = 0; i < n; i++) {scanf("%s", p[i].name); // 读取项目名int hot = 0; // 初始化当前项目的热度值为0for (int j = 0; j < 5; j++) {int score; // 当前维度的统计值scanf("%d", &score); // 读取统计值hot += score * weight[j]; // 根据权重计算热度值}p[i].h = hot; // 存储计算出的热度值到项目结构体中}// 使用qsort对项目结构体数组按照cmp函数规则进行排序qsort(p, n, sizeof(project), cmp);// 输出排序后的项目名for (int i = 0; i < n; i++) {printf("%s\n", p[i].name);}return 0; // 主函数返回0,表示程序执行成功
}

注意:

1、strcmp()

strcmp() 是C语言中用于比较两个字符串的库函数,它定义在 <string.h> 头文件中。该函数用于比较两个字符串的内容,并根据比较结果返回一个整数值。

函数原型为:

int strcmp(const char *str1, const char *str2);

参数说明:

  • str1:指向第一个字符串的指针。
  • str2:指向第二个字符串的指针。

函数功能:

  • 比较字符串 str1str2,逐个字符进行比较,直到遇到不同的字符或遇到’\0’(字符串结束符)为止。
  • 如果 str1 和 str2 所有相同位置上的字符都相等,则认为两个字符串相等,返回 0。
  • 如果 str1 和 str2 在某个位置上的字符不相等,则以ASCII码值大小作为判断依据,返回值为正、负或零:
    • 返回值 > 0,表示 str1 中对应位置的字符大于 str2 中的字符,即 str1 字符串大于 str2 字符串;
    • 返回值 < 0,表示 str1 中对应位置的字符小于 str2 中的字符,即 str1 字符串小于 str2 字符串;
    • 返回值 = 0,表示两个字符串相等。

2、“->”是否可以使用“.”替代

int cmp(const void *a, const void *b) {project *A = (project *)a;project *B = (project *)b;if (A->h != B->h) {return B->h - A->h;} else {return strcmp(A->name, B->name);}
}  
其中的“->”是否可以使用“.”替代

在C语言中,结构体成员的访问有两种方式:.->。当操作的对象是指向结构体的指针时,必须使用->来访问结构体成员;而如果操作的对象本身就是结构体变量,则可以使用.来访问成员。

在这个特定的cmp函数中,由于传入的是指向project结构体的指针(void *avoid *b),所以在转换类型后,应当使用->来访问结构体中的成员(如A->hA->name)。因此,在这个上下文中不能使用.替代->

文章目录

  • 题目描述
  • 输入描述
  • 输出描述
  • 用例1
  • 说明
  • 用例2
  • 说明
  • 代码
  • 注意:
    • 1、strcmp()
    • 2、“->”是否可以使用“.”替代

相关文章:

开源项目热度榜单

题目描述 某个开源社区希望将最近热度比较高的开源项目出一个榜单&#xff0c;推荐给社区里面的开发者。对于每个开源项目&#xff0c;开发者可以进行关注(watch)、收藏(star)、fork、提issue、提交合并请求(MR)等。 数据库里面统计了每个开源项目关注、收藏、fork、issue、M…...

Ubuntu系统搭建HadSky论坛并结合内网穿透实现无公网ip远程访问

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

gowin GW1N4 LED

基于上已篇文章基础上增加LED闪烁的功能 《gowin GW1N4 OSC IP 使用》 gowin GW1N4 OSC IP 使用-CSDN博客 https://blog.csdn.net/wzy15965343032/article/details/136172184?spm1001.2014.3001.5502 代码&#xff1a; module osc_test(input rst_n,output test_clk,output …...

Linux ipvlan详解(l2、l3、l3s和bridge、private和vepa模式)

Linux ipvlan详解&#xff0c;测试l2、l3、l3s和bridge、private和vepa模式。 最近在看Docker的网络&#xff0c;看到关于ipvlan网络的介绍。查阅了相关资料&#xff0c;记录如下。 参考 1.图解几个与Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN 2.IPVlan 详…...

理解并实现OpenCV中的图像平滑技术

导读 图像模糊&#xff08;也称为图像平滑&#xff09;是计算机视觉和图像处理中的基本操作之一。模糊图像通常是噪声减少、边缘检测和特征提取等应用的第一步。在本博客中&#xff0c;我们将重点介绍如何使用Python中的OpenCV库应用多种模糊技术。 理论概述&#xff1a; 基本…...

ChatGPT高效提问—prompt实践(白领助手)

ChatGPT高效提问—prompt实践&#xff08;白领助手&#xff09; ​ 随着社会的不断发展&#xff0c;白领的比例越来越高。白领的工作通常较为繁忙&#xff0c;需要管理复杂的项目。工作量大、要求高、任务紧急&#xff0c;时间分配不当部分可能导致工作效率低下&#xff0c;任…...

Code Composer Studio (CCS) - Comment (注释)

Code Composer Studio [CCS] - Comment [注释] References Add Block Comment: 选中几行代码 -> 鼠标右键 -> Source -> Add Block Comment shortcut key: Ctrl Shift / Remove Block Comment: 选中几行代码->鼠标右键->Source->Remove Block Comment s…...

springboot/ssm校园菜鸟驿站管理系统Java校园快递取件管理系统

springboot/ssm校园菜鸟驿站管理系统Java校园快递取件管理系统 开发语言&#xff1a;Java 框架&#xff1a;springboot&#xff08;可改ssm&#xff09; vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.…...

【Mybatis】TypeHandler使用

引言 在使用MyBatis进行项目开发时&#xff0c;我们经常会遇到Java类型与数据库类型不匹配的情况。为了解决这一问题&#xff0c;MyBatis提供了一个强大的机制——TypeHandler。TypeHandler是MyBatis中一个用于处理Java类型和数据库类型转换的组件&#xff0c;它在MyBatis进行…...

[计算机网络]---网络编程套接字

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、基础知识…...

分布式文件系统 SpringBoot+FastDFS+Vue.js【二】

分布式文件系统 SpringBootFastDFSVue.js【二】 六、实现上传功能并展示数据6.1.创建数据库6.2.创建spring boot项目fastDFS-java6.3.引入依赖6.3.fastdfs-client配置文件6.4.跨域配置GlobalCrosConfig.java6.5.创建模型--实体类6.5.1.FastDfsFile.java6.5.2.FastDfsFileType.j…...

开源软件:推动软件行业繁荣的力量

文章目录 &#x1f4d1;引言开源软件的优势分析开放性与透明度低成本与灵活性创新与协作 开源软件对软件行业的影响推动技术创新和进步促进软件行业的合作与交流培养人才和提高技能促进软件行业的可持续发展 结语 &#x1f4d1;引言 随着信息技术的飞速发展&#xff0c;软件已经…...

[杂记]mmdetection3.x中的数据流与基本流程详解(数据集读取, 数据增强, 训练)

之前跑了一下mmdetection 3.x自带的一些算法, 但是具体的代码细节总是看了就忘, 所以想做一些笔记, 方便初学者参考. 其实比较不能忍的是, 官网的文档还是空的… 这次想写其中的数据流是如何运作的, 包括从读取数据集的样本与真值, 到数据增强, 再到模型的forward当中. 0. MMDe…...

阿里云香港轻量应用服务器怎么样,建站速度快吗?

阿里云香港服务器中国香港数据中心网络线路类型BGP多线精品&#xff0c;中国电信CN2高速网络高质量、大规格BGP带宽&#xff0c;运营商精品公网直连中国内地&#xff0c;时延更低&#xff0c;优化海外回中国内地流量的公网线路&#xff0c;可以提高国际业务访问质量。阿里云服务…...

事务及在SpringBoot项目中使用的两种方式

1.事务简介 事务&#xff08;transaction&#xff09;是访问并可能操作各种数据项的一个数据库操作序列&#xff0c;这些操作要么全部执行&#xff0c;要么全部不执行&#xff0c;是一个不可分割的工作单位。 事物的四大特性: 原子性&#xff08;Atomicity&#xff09;&#xf…...

stm32--笔记

一、引脚与变量 ​​​​​​​​​​​​​​ 二、STM32时钟 [STM32-时钟系统详解_stm32时钟_KevinFlyn的博客-CSDN博客] 三、定时器中断实验 1、定时器中断实验 ​ stm32关于通用定时器的周期、频率计算公式_stm32tim频率计算_胶囊咖啡的博客-CSDN博客 ​ 【STM32】通用…...

2024前端面试准备之CSS篇(二)

全文链接 1. 什么是伪类和伪元素 伪类(Pseudo-class): 伪类是选择器的一种,用于选择特定状态或条件下的元素。它们以冒号(:)开头,用于向选择器添加额外的特定条件。例如,:hover伪类用于选择鼠标悬停在元素上的状态,:nth-child(n)伪类用于选择父元素下的第n个子元素等。…...

轨道交通信号增强与覆盖解决方案——经济高效,灵活应用于各类轨道交通场景!

方案背景 我国是世界上轨道交通里程最长的国家&#xff0c;轨道交通也为我们的日常出行带来极大的便利。伴随着无线通信技术的快速发展将我们带入电子时代&#xff0c;出行的过程中对无线通信的依赖程度越来越高&#xff0c;无论是车站还是车内都需要强大、高质量的解决方案以…...

学习数据接构和算法的第10天

题目讲解 尾插 #include <stdio.h> #include <stdlib.h> // 定义顺序表结构 #define MAX_SIZE 100 struct ArrayList {int array[MAX_SIZE];int size; // 当前元素个数 }; // 初始化顺序表 void init(struct ArrayList *list) {list->size 0; // 初始时元素个…...

初识KMP算法

目录 1.KMP算法的介绍 2.next数组 3.总结 1.KMP算法的介绍 首先我们会疑惑&#xff0c;什么是KMP算法&#xff1f;这个算法是用来干什么的&#xff1f; KMP&#xff08;Knuth-Morris-Pratt&#xff09;算法是一种用于字符串匹配的经典算法&#xff0c;它的目标是在一个主文本…...

3步完成SQLite到MySQL数据库迁移:智能转换工具实战指南

3步完成SQLite到MySQL数据库迁移&#xff1a;智能转换工具实战指南 【免费下载链接】sqlite-to-mysql Script to convert and add sqlite3 database into a mysql/mariadb database 项目地址: https://gitcode.com/gh_mirrors/sq/sqlite-to-mysql 在开发项目从原型到生产…...

ab、Postman、JMeter并发测试真相:协议层、运行时与系统瓶颈解析

1. 为什么你测出来的“并发”根本不是并发——从一次线上服务雪崩说起上周五下午三点&#xff0c;我们一个核心订单查询接口突然响应时间从80ms飙升到2.3秒&#xff0c;错误率冲到17%&#xff0c;监控大盘一片血红。运维拉出负载曲线&#xff0c;CPU和内存都正常&#xff1b;开…...

别再死记硬背MFCC公式了!用Python手把手带你复现FBank/MFCC特征提取全流程

从零实现语音特征提取&#xff1a;用Python拆解FBank与MFCC的数学之美语音识别技术正悄然改变我们与机器交互的方式&#xff0c;但很少有人真正理解声音是如何被转化为机器可读的数字特征的。本文将带您深入音频信号处理的数学世界&#xff0c;通过Python代码亲手实现从原始波形…...

魔兽争霸3终极优化指南:5分钟解决画面拉伸与帧率限制难题

魔兽争霸3终极优化指南&#xff1a;5分钟解决画面拉伸与帧率限制难题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为经典游戏魔兽争霸3在现代电…...

OFDM同步避坑指南:STO和CFO估计,选ML还是Classen算法?看这篇就够了

OFDM同步算法实战指南&#xff1a;如何在高干扰环境中选择最优STO/CFO估计方案无线通信工程师在设计OFDM系统时&#xff0c;往往会在同步环节遇到一个关键抉择&#xff1a;面对复杂的信道环境和严苛的性能要求&#xff0c;究竟该选择哪种同步算法组合&#xff1f;这个问题没有标…...

物联网安全新思路:轻量级机器学习算法实战评测与选型指南

1. 项目概述&#xff1a;当物联网遇上轻量级机器学习在物联网的世界里&#xff0c;安全从来不是一道选择题&#xff0c;而是一道生存题。想象一下&#xff0c;你家里的智能门锁、工厂里的传感器、街头的智能路灯&#xff0c;这些数以亿计的设备每时每刻都在产生和交换数据。它们…...

用while循环语句求和

在“用for循环语句求和”中&#xff0c;学习了for循环语句&#xff0c;这篇博文继续学习另一种形式的循环程序结构while循环语句。while循环语句一般用于事先不能确定循环次数的情况&#xff0c;格式为while 表达式循环体end如果表达式为真&#xff0c;就执行循环体的内容&…...

8051开发中禁用自动代码分区的实践指南

1. 禁用自动代码分区的技术背景在8051架构的嵌入式开发中&#xff0c;代码分区&#xff08;Bank Switching&#xff09;是一种扩展程序存储器空间的常用技术。传统8051芯片的寻址空间有限&#xff0c;通过分区切换机制可以将代码分布到不同的物理存储区域。Keil C51开发工具链默…...

告别踩坑:手把手教你为openEuler 22.03 LST配置RealVNC 6.11远程桌面(含序列号激活)

深度指南&#xff1a;在openEuler 22.03 LTS上部署RealVNC企业级远程桌面方案对于需要在Linux环境下实现远程图形化管理的用户而言&#xff0c;RealVNC作为一款成熟的商业解决方案&#xff0c;提供了比开源工具更稳定的连接性能和更完善的安全机制。本文将基于openEuler 22.03 …...

Claude + MS Project双引擎协同术:5分钟完成跨时区资源冲突检测与重排程,压测显示交付准时率提升41.6%

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Claude项目管理应用技巧 Claude 作为具备强推理与长上下文理解能力的大语言模型&#xff0c;可深度融入项目管理全生命周期&#xff0c;提升需求分析、任务拆解、进度追踪与风险预判效率。关键在于将其定位为…...