这种成绩排序怎么做啊 求佬告诉

img


我不知道这种字符串数组和分数要怎么输入进去
好难,就是这种没有学生个数的情况

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

int main() {
    int n;
    scanf("%d", &n); // 输入行数
    char name[100][100];
    int score[100];
    for (int i = 0; i < n; i++) {
        scanf("%s %d", name[i], &score[i]); // 输入人名和分数
    }
    // 冒泡排序,按照分数从高到低排列
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (score[j] < score[j+1]) {
                int tmpScore = score[j];
                char tmpName[100];
                strcpy(tmpName, name[j]);
                score[j] = score[j+1];
                strcpy(name[j], name[j+1]);
                score[j+1] = tmpScore;
                strcpy(name[j+1], tmpName);
            }
        }
    }
    // 输出人名和对应的分数
    for (int i = 0; i < n; i++) {
        printf("%s %d\n", name[i], score[i]);
    }
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7760916
  • 你也可以参考下这篇文章:为什么不能从子函数中返回临时对象的指针和引用,却可以返回一个临时变量的值
  • 除此之外, 这篇博客: 嵌入式软件学习问题汇总(一)什么是嵌入式?中的 单片机系统与嵌入式系统的差别 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

      要了解单片机,就要追溯到上世纪早期在没有大规模集成电路技术的时代,计算机的设计原理,那时的计算机CPU、随机存储器RAM、只读存储器ROM、各种外设I/O和中断系统ROM等这些都是分离在电路板的各个角落里。直到20世纪70年代左右,随着科学技术的不断发展,利用大规模集成电路技术把CPU和数据存储器(RAM)、程序存储器(ROM)及其他I/O通信口集成在一块芯片上,构成一个最小的计算机系统,这个就是单片机。
      那么跟单片机先比较嵌入式有哪些不同的地方呢?单片机产品和嵌入式产品都是电子产品,整个SOC都以CPU作为核心内嵌各种存储器,都有一些外围硬件作为辅助,也都是通过软件控制硬件。在功能上有很多的相似之处。但是在SOC性能上有非常巨大的差别,例如在内存方面,嵌入式系统的SOC明显比单片机大很多。现在将单片机与嵌入式系统SOC内存资源进行比较(顺便与PC机SOC进行比较):
      1、一般单片机系统中内存需求小,而且希望开发尽肯能的简单,因单片机SOC内嵌小容量的SRAM加小容量的NorFlash。
      2、嵌入式系统内存需求大,因为大容量的Norflash相对较贵,因此嵌入式SOC一般采NANDFlash+Dram+Sram+少量Srom。
      3、一般PC机都是:小容量的NorFLash+大容量的硬盘(类似于Nandflash)+大容量的Dram。
      可见在硬件上三者之间就存在较大的差别。
      嵌入式系统和单片机系统在CPU方面也是有一定差异:是否有MMU(分页内存管理单元,它是一种负责处理CPU的内存访问请求的计算机硬件),当然操作系统方面两者也具有一定差异,单片机系统因为内存资源较少的缘故,因此在操作系统移植方面一般只能跑一些简单的RTOS,像51单片机这样的简单SOC甚至连一些轻量级的RTOS都跑不了,哪怕能跑也没人会用它去跑操作系统(有朋友跟我说能跑,他跑过,纯粹是自己在玩呢,是不是),而嵌入式系统就比较牛了,一般在嵌入式系统中都会跑Linux、Android操作系统。(一般分需不需要比较友好的人机交互界面,不需要的一般都是跑LINUX,像平板、手机一般都是跑的Android,当然Android是基于Linux内核的,这个大家也要了解一下)最后,单片机与嵌入式在应用领域也是有较大差异的,单片机一般应用在操作简单的智能家电(如智能台灯),嵌入式一般运用领域较广(例如工业领域、汽车、航空航天等等都需要嵌入式)。这也是我们学习嵌入式的原因所在。

  • 您还可以看一下 刘建萍老师的人工智能系列课程零基础讲解知识点和实例应用线性回归梯度下降逻辑回归课程中的 讲解机器学中会涉及到的有关数学方面的知识储备有哪些小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    针对问题的解答:

    首先,如果没有学生个数的字符串数组和分数如何输入是不清楚,我们可以假设这个字符串数组是通过某种方式获取到的。例如,通过一个文件读取,或者是通过键盘输入。

    接着,对于成绩排序,我们可以采用快速排序算法或者归并排序算法进行排序。以快速排序为例,具体步骤如下:

    1. 定义一个快速排序函数,输入为一个字符串数组和对应的分数数组,以及左右两个下标l和r,表示排序的范围。
    2. 如果l >= r,则返回。
    3. 以数组最右侧的分数作为基准值,将数组分为比基准值小和比基准值大的两部分,分别进行递归排序。
    4. 定义一个交换函数,用于交换两个字符串和对应的分数。
    5. 在快速排序函数内部调用交换函数,实现对分数数组的排序。

    下面给出代码实现:

    # 交换函数
    def swap(arr, score, i, j):
        arr[i], arr[j] = arr[j], arr[i]
        score[i], score[j] = score[j], score[i]
    
    # 快速排序函数
    def quick_sort(arr, score, l, r):
        if l >= r:
            return
        pivot = score[r] # 以最后一个分数为基准值
        i, j = l, l
        while j < r:
            if score[j] < pivot:
                swap(arr, score, i, j)
                i += 1
            j += 1
        swap(arr, score, i, r) # 将基准值放到正确的位置上
        quick_sort(arr, score, l, i - 1) # 对左半部分递归快排
        quick_sort(arr, score, i + 1, r) # 对右半部分递归快排
    
    # 示例数据
    arr = ['Tom', 'Jerry', 'Alice', 'Bob']
    score = [85, 72, 90, 78]
    
    # 调用快速排序函数,对分数进行排序
    quick_sort(arr, score, 0, len(score) - 1)
    
    # 输出排序结果,即按分数从小到大排列的学生名字
    for i in range(len(score)):
        print(arr[i])
    

    以上代码的输出结果为:

    Jerry
    Bob
    Tom
    Alice
    

    其中,最终输出的结果为按照分数从小到大排列的学生名字。这里只是一个简单的示例,实际上还需要根据具体情况进行调整和完善。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^