PAT-AL 1039. Course List for Student

本文介绍了一种基于C语言的课程选修查询系统的设计与实现。系统通过定义课程和学生结构体,采用排序和二分查找算法提高查询效率。文章详细展示了如何使用结构体、数组和标准库函数实现高效的数据管理和查询。

1、知识点:排序
2、思路:定义course结构、student结构:
struct course{
int ind, stu_num; //课程编号,选课学生数
char name_arr[MAXNI][STRLEN]; //学生姓名
};

struct student{
int order; //查询顺序
char name[STRLEN]; //姓名
vector course_ind; //课程编号
};
读入课程数组cour,然后按ind排序;读入查询学生数组stu_arr,按姓名排序。然后遍历课程,对于每门课的每个选课学生,按照二分查找查询学生表stu_arr中的姓名,如果找到,就将对应的课程编号加入该学生。最后将查询学生表stu_arr做数据离散化,映射到disc数组,遍历disc数组打印输出答案。

注意:
①尽量用C的内容而不是C++(代码换成C++版超时,而C版顺利AC,~~);
②学生姓名排好序按照二分查找提升效率,否则会超时;
③student结构中用了vector,如果用malloc分配内存会出错,直接定义stu_arr数组或者用new分配内存则没事。

/*用途:
**说明:
**算法:
*/

//#define LOCAL
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
#define MAXN 40000+10
#define MAXK 2500+10
#define MAXNI 200+10
#define STRLEN 10
struct student{
    int order;
    char name[STRLEN];
    vector<int> course_ind;
};

struct course{
    int ind, stu_num;
    char name_arr[MAXNI][STRLEN];
};
int N, K;
course *cour;
//student stu_arr[MAXN];
student *stu_arr;
int *disc;    //stu_arr的离散化数组

void init_course();
int cmp_course_ind(const void* a, const void* b);
void init_stu();
int cmp_order(const void* a, const void* b);
int find_name(char* name);    //二分查找姓名
void print_course_ind(int ind);
int main()
{
#ifdef LOCAL
    freopen(".in", "r", stdin);
    freopen(".out", "w", stdout);
#endif

    scanf("%d%d", &N, &K);
    cour = (course*)malloc(sizeof(course)*K);
    init_course();
    for(int i=0; i<K; i++){
        int ind, stu_num;
        char name[STRLEN];
        scanf("%d%d", &ind, &stu_num);
        for(int j=0; j<stu_num; j++){
            scanf("%s", name);
            cour[i].ind = ind;
            strcpy(cour[i].name_arr[cour[i].stu_num], name);
            cour[i].stu_num++;
        }
    }

    qsort(cour, K, sizeof(course), cmp_course_ind); 
//  stu_arr = (student*)malloc(sizeof(student)*N);  //出错 
    stu_arr = new student[N];
    for(int i=0; i<N; i++){
        scanf("%s", stu_arr[i].name);
        stu_arr[i].order = i;
    }

    qsort(stu_arr, N, sizeof(student), cmp_order);

    int index;
    char name[STRLEN];
    for(int i=0; i<K; i++){
        for(int j=0; j<cour[i].stu_num; j++){
            index = find_name(cour[i].name_arr[j]);
            if(index != -1)
                stu_arr[index].course_ind.push_back(cour[i].ind);
        }
    }

    disc = new int[N];
    for(int i=0; i<N; i++)
        disc[stu_arr[i].order] = i;

    for(int i=0; i<N; i++){
        int ind = disc[i];
        printf("%s %d", stu_arr[ind].name, stu_arr[ind].course_ind.size());
        print_course_ind(ind);
    }

    return 0;
}

void init_course()
{
    for(int i=0; i<K; i++)
        cour[i].ind = cour[i].stu_num = 0;
}

void print_course_ind(int ind)
{
    int len = stu_arr[ind].course_ind.size();
    for(int i=0; i<len; i++)
        printf(" %d", stu_arr[ind].course_ind[i]);
    printf("\n");
}

inline int cmp_course_ind(const void* a, const void* b)
{
    return (*(course*)a).ind - (*(course*)b).ind;
}

inline int cmp_order(const void* a, const void* b)
{
    return strcmp((*(student*)a).name, (*(student*)b).name) < 0 ? -1 : 1;   //注意这里的比较字符数组的方法
}

inline int find_name(char* name)
{
    int start, med, end;
    start = 0;
    end = N-1;
    med = (start + end) / 2;
    while(start <= end){
        if(strcmp(name, stu_arr[med].name) > 0)
            start = med+1;
        else if(!strcmp(name, stu_arr[med].name))
            return med;
        else
            end = med-1;

        med = (start + end) / 2;
    }
    return -1;
}
这个是完整源码 python实现 Django 【python毕业设计】基于Python的天气预报(天气预测分析)(Django+sklearn机器学习+selenium爬虫)可视化系统.zip 源码+论文+sql脚本 完整版 数据库是mysql 本研究旨在开发一个基于Python的天气预报可视化系统,该系统结合了Django框架、sklearn机器学习库和Selenium爬虫技术,实现对天气数据的收集、分析和可视化。首先,我们使用Selenium爬虫技术从多个天气数据网站实时抓取气象数据,包括温度、湿度、气压、风速等多项指标。这些数据经过清洗和预处理后本研究旨在开发一个基于Python的天气预报可视化系统,该系统结合了Django框架、sklearn机器学习库和Selenium爬虫技术,实现对天气数据的收集、分析和可视化。首先,我们使用Selenium爬虫技术从多个天气数据网站实时抓取气象数据,包括温度、湿度、气压、风速等多项指标。这些数据经过清洗和预处理后,将其存储在后端数据库中,以供后续分析。 其次,采用s,将其存储在后端数据库中,以供后续分析。 其次,采用sklearn机器学习库构建预测模型,通过时间序列分析和回归方法,对未来天气情况进行预测。我们利用以往的数据训练模型,以提高预测的准确性。通过交叉验证和超参数优化等技术手段,我们优化了模型性能,确保其在实际应用中的有效性和可靠性。 最后,基于Django框架开发前端展示系统,实现天气预报的可视化。用户可以通过友好的界面查询实时天气信息和未来几天内的天气预测。系统还提供多种图表类型,包括折线图和柱状图,帮助用户直观理解天气变化趋势。 本研究的成果为天气预报领域提供了一种新的技术解决方案,不仅增强了数据获取和处理的效率,还提升了用户体验。未来,该系统能够扩展至其他气象相关的应用场景,为大众提供更加准确和及时的气象服务。
# 为什么 HTTPS 克隆仍然失败?如何解决? ## 详解 你已经尝试了多种方式克隆仓库,当前执行过程如下: ```bash git clone https://github.com/lmx-hr/2025-finalproject-template.git ``` 首次报错: > **server certificate verification failed. CAfile: none CRLfile: none** 你正确地使用了: ```bash git config --global http.sslVerify false ``` → 这解决了证书验证问题。 但第二次执行时出现新错误: > **remote: Invalid username or token. Password authentication is not supported for Git operations.** > 致命错误:'https://github.com/...' 鉴权失败 --- ### 🔍 错误原因分析 #### ✅ 你已解决的问题: - `sslVerify` 失败 → 已通过关闭 SSL 检查绕过(临时可行) #### ❌ 当前真正的问题是: GitHub **自 2021 年起已全面禁用密码认证(Password Authentication)**! 当你输入 GitHub 账号密码时,Git 不再接受普通密码登录,而是要求使用: > **Personal Access Token (PAT)** 替代密码 所以即使用户名正确,输入密码也会被拒绝。 --- ### ✅ 正确解决方案:使用 Personal Access Token(PAT) #### ✔️ 第一步:生成 PAT(个人访问令牌) 1. 打开浏览器,登录 [GitHub 官网](https://github.com) 2. 点击右上角头像 → `Settings` 3. 左侧菜单选择:`Developer settings` → `Personal access tokens` → `Tokens (classic)` 4. 点击 `Generate new token` → `Generate new token (classic)` 5. 填写: - Note: `git-clone-token` - Expiration: 选择有效期(建议 7 天) - Permissions: 勾选 `repo` 和 `workflow` 6. 点击底部 `Generate token` 7. **复制生成的 token(一串字母数字组合)并保存好!** > ⚠️ 关闭页面后无法再次查看,请立即复制! --- #### ✔️ 第二步:使用 Token 作为密码进行克隆 重新运行克隆命令: ```bash git clone https://github.com/lmx-hr/2025-finalproject-template.git ``` 当提示输入用户名和密码时: - **Username**: `lmx-hr` - **Password**: **粘贴你刚刚复制的 PAT 令牌** ✅ 此时应能成功克隆! --- ### 💡 更优方案:将 Token 写入 URL(避免重复输入) 你可以直接在克隆地址中嵌入 token: ```bash git clone https://lmx-hr:你的TOKEN@github.com/lmx-hr/2025-finalproject-template.git ``` 示例: ```bash git clone https://lmx-hr:ghp_a1B2c3D4e5F6G7h8I9j0K@github.com/lmx-hr/2025-finalproject-template.git ``` 这样就不需要每次都手动输入用户名和密码。 --- ### 🛠️ 可选:配置凭据存储(长期免输) ```bash # 启用凭据缓存(保存在内存中) git config --global credential.helper cache # 或永久保存到磁盘(谨慎使用) git config --global credential.helper store ``` 下次输入一次 token 后,Git 会自动记住。 --- ### 📌 结论 你现在处于: ✅ 网络连接问题已解决(关闭 sslVerify) ❌ 认证方式错误(仍在尝试用密码登录) 🔑 **唯一缺失的是:使用 Personal Access Token 替代密码** 只要你在“Password”位置输入正确的 PAT,即可完成克隆。 --- ## 知识点(列出该过程中涉及的核心知识点) - **GitHub 密码认证淘汰机制**:自 2021 年起,Git 操作不再支持账户密码,必须使用 PAT- **Personal Access Token(PAT)**:一种安全替代凭证,可用于 API 和 Git 操作的身份验证。 - **HTTPS 克隆鉴权流程**:需在密码框中输入 PAT 而非账户密码,否则会被服务器拒绝。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值