flag34 志愿投档系统

本文介绍了一个基于学生志愿和成绩的学生分配算法实现。该算法首先对学生进行排序,然后根据学生的志愿和学校的容量限制将学生分配到相应的学校。文章通过具体实例展示了整个分配过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# include <stdio.h>
# include <malloc.h>
typedef struct stuent
{
int id;
int a[2];
int b[3];
int sum;
int rank;
}Stu,*Pstu;
typedef struct school
{
int schoolid;
int max;
int cnt;
int studentid[10];
int prestudentid;
}Sch,*Psch;
void sort (Pstu student,int T);
void xianshi (Pstu student);
void toudang(Pstu student,Psch school,int T1,int T2);
void toudangxianshi (Psch school);
void sortid (Pstu student,int T);
int main()
{
int T1=11,T2=6,T3=3;
Pstu student =(Pstu)malloc(sizeof(Stu)*T1);
Psch school =(Psch)malloc(sizeof(Sch)*T2);
student[0].id=0;
student[0].a[0]=100;
student[0].a[1]=100;
student[0].b[0]=0;
student[0].b[1]=1;
student[0].b[2]=2;
student[1].id=1;
student[1].a[0]=60;
student[1].a[1]=60;
student[1].b[0]=2;
student[1].b[1]=3;
student[1].b[2]=5;//为了方便调试 直接给出了输入 
student[2].id=2;
student[2].a[0]=100;
student[2].a[1]=90;
student[2].b[0]=0;
student[2].b[1]=3;
student[2].b[2]=4;
student[3].id=3;
student[3].a[0]=90;
student[3].a[1]=100;
student[3].b[0]=1;
student[3].b[1]=2;
student[3].b[2]=0;
student[4].id=4;
student[4].a[0]=90;
student[4].a[1]=90;
student[4].b[0]=5;
student[4].b[1]=1;
student[4].b[2]=3;
student[5].id=5;
student[5].a[0]=80;
student[5].a[1]=90;
student[5].b[0]=1;
student[5].b[1]=0;
student[5].b[2]=2;
student[6].id=6;
student[6].a[0]=80;
student[6].a[1]=80;
student[6].b[0]=0;
student[6].b[1]=1;
student[6].b[2]=2;
student[7].id=7;
student[7].a[0]=80;
student[7].a[1]=80;
student[7].b[0]=0;
student[7].b[1]=1;
student[7].b[2]=2;
student[8].id=8;
student[8].a[0]=80;
student[8].a[1]=70;
student[8].b[0]=1;
student[8].b[1]=3;
student[8].b[2]=2;
student[9].id=9;
student[9].a[0]=70;
student[9].a[1]=80;
student[9].b[0]=1;
student[9].b[1]=2;
student[9].b[2]=3;
student[10].id=10;
student[10].a[0]=100;
student[10].a[1]=100;
student[10].b[0]=0;
student[10].b[1]=2;
student[10].b[2]=4;

for (int i=0;i<T2;i++)
{
school[i].schoolid=i;
school[i].cnt=0;
}
school[0].max=2;
school[1].max=1;
school[2].max=2;
school[3].max=2;
school[4].max=2;
school[5].max=3;
for(int i=0;i<T1;i++)
{
student[i].sum=student[i].a[0]+student[i].a[1];
}
sort(student,T1);
//xianshi(student);
//sortid(student,T1);
toudang(student,school,T1,T2);
toudangxianshi(school);

return 0;
}
void sortid (Pstu student,int T)
{
Stu tmp;
bool change=true;
for(int i=0;i<T && change;i++)
{
change =false;
for(int j=T-1;j>i;j--)
{
if(student[j].id<student[j-1].id)
{
tmp=student[j];
student[j]=student[j-1];
student[j-1]=tmp;
change=true;
}
}
}
}
void sort (Pstu student,int T)
{
Stu tmp;
bool change=true;
for(int i=0;i<T && change;i++)
{
change =false;
for(int j=T-1;j>i;j--)
{
if(student[j].sum>student[j-1].sum)
{
tmp=student[j];
student[j]=student[j-1];
student[j-1]=tmp;
change=true;
}
if(student[j].sum==student[j-1].sum)
{
if(student[j].a[0]>student[j-1].a[0])
{
tmp=student[j];
student[j]=student[j-1];
student[j-1]=tmp;
change=true;
}
}
}
}
student[0].rank=0;
for(int i=1;i<T;i++)
{
if(student[i].sum==student[i-1].sum)
{
if(student[i].a[0]<student[i-1].a[0])
student[i].rank=student[i-1].rank+1;
else
student[i].rank=student[i-1].rank;
}
else
student[i].rank=i;
}
}
void xianshi (Pstu student)
{
for(int i=0;i<11;i++)
{
printf("%d  %d    \n",student[i].id,student[i].rank);
}
}
void toudangxianshi (Psch school)
{
int tmp;
for(int i=0;i<6;i++)
{
if(school[i].cnt>=2)
{
for(int k=0;k<school[i].cnt;k++)
for(int j=school[i].cnt-1;j>k;j--)
{
if(school[i].studentid[j]<school[i].studentid[j-1])
{
tmp=school[i].studentid[j];
school[i].studentid[j]=school[i].studentid[j-1];
school[i].studentid[j-1]=tmp;
}
}

}
}
for(int i=0;i<6;i++)
{
for(int j=0;j<school[i].cnt;j++)
{
printf("%d ",school[i].studentid[j]);
}
printf("\n");
}
}
void toudang(Pstu student,Psch school,int T1,int T2)
{
for(int i=0;i<T1;i++)
{

for(int j=0;j<3;j++)
{
if(school[student[i].b[j]].cnt<school[student[i].b[j]].max)
{
school[student[i].b[j]].studentid[school[student[i].b[j]].cnt]=student[i].id;
school[student[i].b[j]].cnt++;
school[student[i].b[j]].prestudentid=student[i].id;
break;
}
else if (school[student[i].b[j]].cnt>=school[student[i].b[j]].max && student[i].rank==student[school[student[i].b[j]].prestudentid].rank)
{
school[student[i].b[j]].studentid[school[student[i].b[j]].cnt]=student[i].id;
school[student[i].b[j]].cnt++;
break;
}
}
}
}
资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 “STC单片机电压测量”是一个以STC系列单片机为基础的电压检测应用案例,它涵盖了硬件电路设计、软件编程以及数据处理等核心知识点。STC单片机凭借其低功耗、高性价比和丰富的I/O接口,在电子工程领域得到了广泛应用。 STC是Specialized Technology Corporation的缩写,该公司的单片机基于8051内核,具备内部振荡器、高速运算能力、ISP(在系统编程)和IAP(在应用编程)功能,非常适合用于各种嵌入式控制系统。 在源代码方面,“浅雪”风格的代码通常简洁易懂,非常适合初学者学习。其中,“main.c”文件是程序的入口,包含了电压测量的核心逻辑;“STARTUP.A51”是启动代码,负责初始化单片机的硬件环境;“电压测量_uvopt.bak”和“电压测量_uvproj.bak”可能是Keil编译器的配置文件备份,用于设置编译选项和项目配置。 对于3S锂电池电压测量,3S锂电池由三节锂离子电池串联而成,标称电压为11.1V。测量时需要考虑电池的串联特性,通过分压电路将高电压转换为单片机可接受的范围,并实时监控,防止过充或过放,以确保电池的安全和寿命。 在电压测量电路设计中,“电压测量.lnp”文件可能包含电路布局信息,而“.hex”文件是编译后的机器码,用于烧录到单片机中。电路中通常会使用ADC(模拟数字转换器)将模拟电压信号转换为数字信号供单片机处理。 在软件编程方面,“StringData.h”文件可能包含程序中使用的字符串常量和数据结构定义。处理电压数据时,可能涉及浮点数运算,需要了解STC单片机对浮点数的支持情况,以及如何高效地存储和显示电压值。 用户界面方面,“电压测量.uvgui.kidd”可能是用户界面的配置文件,用于显示测量结果。在嵌入式系统中,用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值