⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sortmain.h

📁 是我的课程设计
💻 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 + -