📄 sortmain.h
字号:
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
#include<iostream.h>
//工种总数
#define M 20
//最大工种招聘人1数
#define MLIM 10
#define DEMARK 5
typedef struct stu{
int no, total, z[2], sortm, zi;//no,号码;total,分数;z[2],两工种号;sortm,筛选后分数,此分数要么是total要么是ototal-5;zi,工种号码0或1
struct stu *next;
} STU;
// 最多m个工种
struct rzmode{
int lmt , count;
STU *next;
} rz[M];
STU *head = NULL, *over = NULL;
int all;//n个人
//此下为打印功能
void print(STU *p)
{
for (;p!=NULL; p = p->next) printf ("%d(%d)\t", p->no, p->total);
}
//插入功能(插入并排序,从大到小)
void insert(STU **p, STU *u)
{
STU *v, *q;
for (q = *p;q != NULL; v = q , q = q->next)
if (q-> sortm < u->sortm) break;
if ( q == *p) *p = u;
else v->next = u;
u->next = q ;
}
//主函数
void sortmain()
{
int zn, i,j , no, total, z1, z2 ,stunum;
STU *p;
srand((unsigned) time(0)) ;
//不超过M个工种
printf ("请输入工种数:");
cin>>zn;
// zn = rand() % M;
printf ("工种数: %d \n",zn);
//为每个工种读入招聘额(2)
for (all = 0,i=0; i < zn; i++)
{
rz[i].lmt = rand() % MLIM;
rz[i].count = 0; rz[i].next = NULL;
all += rz[i].lmt ;
printf ("work %d limit: %d \n",i,rz[i].lmt);
}
printf ("Total jobs:%d \n",all);
//设置参加学生数量
stunum = rand()%100;
printf ("应聘人数: %d \n",stunum);
//一次读4个数据(3),读不出来或者数据有误那就退循环
for (j = 0;j < stunum;j++ )
{
no = j;
//设定100分为满分
total = rand() % 100;
//工种选择
z1 = rand() % zn;
z2 = rand() % zn;
printf ("Student %d info: Mark(%d),Choose(%d,%d) \n",no,total,z1,z2);
//装配一个stu类型数据
p = ( STU *) malloc (sizeof (STU));
p->no = no;
p->total = p->sortm = total;
p->zi = 0; p->z[0] = z1; p->z[1] = z2;
//先插入到head队列中
insert(&head,p);
}
for (;all && head!=NULL;)
{
p = head; head = head -> next;
if (rz[p->z[p->zi]].count < rz[p->z[p->zi]].lmt)
{
rz[p->z[p->zi]].count ++;
insert(&rz[p->z[p->zi]].next, p);
all--;
continue;
}
//这个是把两次筛选后的人都放over中
if (p->zi >= 1 )
{
p->next = over; over = p;
continue;
}
//这个将成绩-5,然后再次放入head队列中
p->sortm -= DEMARK; p->zi++;
insert (&head,p);
}
//打印各个工种
for ( i = 0; i < zn; i++ )
{
printf ("%d:\n",i);
print ( rz[i].next);
printf ("\n");
}
printf ("未被录取者:\n"); print (head);
print (未被录取者); printf("\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -