栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

1015 德才论 (25 分)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

1015 德才论 (25 分)

#include
typedef struct student
{
	int id;
	int de;
	int cai;
} STU;
//void maopao(STU a[], int length);
void print1(STU a[], int length);
void print2(STU a[], int length);
void qsort(STU a[], int begin, int end);
STU level1[1000000], level2[100000], level3[100000], level4[100000];
int main(void)
{	//1.读入三个数
	int N, L, H;
	scanf_s("%d %d %d", &N, &L, &H);
	//2.设置4个结构数组
	STU link;
	//3.判断后读入数组
	int cnt = 1, cnt1 = 0, cnt2 = 0, cnt3 = 0, cnt4 = 0;
	int fail = 0;
	for (cnt = 1; cnt <= N; cnt++)
	{
		scanf_s("%d %d %d", &link.id, &link.de, &link.cai);
		if (link.de >= L && link.cai >= L)
		{
			if (link.de >= H && link.cai >= H)
			{
				level1[cnt1] = link;
				cnt1++;
			}
			if (link.de >= H && link.cai < H)
			{
				level2[cnt2] = link;
				cnt2++;
			}
			if (link.de < H && link.cai < H && link.de >= link.cai)
			{
				level3[cnt3] = link;
				cnt3++;
			}
			if (link.de < H && link.cai > link.de)
			{
				level4[cnt4] = link;
				cnt4++;
			}
		}
		else
		{
			fail++;
			continue;
		}
	}
	cnt1--;
	cnt2--;
	cnt3--;
	cnt4--;
	//4.对每个数组冒泡排序
	qsort(level1, 0, cnt1);
	qsort(level2, 0, cnt2);
	qsort(level3, 0, cnt3);
	qsort(level4, 0, cnt4);
	//5.开始输出
	printf("%dn", N - fail);
	print1(level1, cnt1);
	print1(level2, cnt2);
	print1(level3, cnt3);
	print2(level4, cnt4);
	return 0;
}

//void maopao(STU a[], int length)
//{
//	int i, j;
//	struct student temp;
//	for (i = 0; i <= length - 1; i++)
//	{
//		for (j = i + 1; j <= length; j++)
//		{
//			if (a[i].de + a[i].cai < a[j].de + a[j].cai)
//			{
//				temp = a[i];
//				a[i] = a[j];
//				a[j] = temp;
//			}
//			if (a[i].de + a[i].cai == a[j].de + a[j].cai)
//			{
//				if (a[i].de > a[j].de)
//				{
//
//				}
//				if (a[i].de < a[j].de)
//				{
//					temp = a[i];
//					a[i] = a[j];
//					a[j] = temp;
//				}
//				if (a[i].de == a[j].de)
//				{
//					if (a[i].id > a[j].id)
//					{
//						temp = a[i];
//						a[i] = a[j];
//						a[j] = temp;
//					}
//				}
//			}
//		}
//	}
//}

void print1(STU a[], int length)
{
	int count;
	for (count = 0; count <= length; count++)
	{
		printf("%d %d %dn", a[count].id, a[count].de, a[count].cai);
	}
}

void print2(STU a[], int length)
{
	int count;
	for (count = 0; count <= length - 1; count++)
	{
		printf("%d %d %dn", a[count].id, a[count].de, a[count].cai);
	}
	if (count == length)
	{
		printf("%d %d %d", a[count].id, a[count].de, a[count].cai);
	}
}

void qsort(STU a[], int begin, int end)
{
	if (begin > end)
		return;
	int left = begin;
	int right = end;
	int key = a[begin].de + a[begin].cai;
	STU key2 = a[begin];
	while (begin < end)
	{
		for (; a[end].de + a[end].cai <= key && begin < end; end--)
		{
			if (a[end].de + a[end].cai == key && a[end].de > key2.de)
				break;
			if (a[end].de + a[end].cai == key && a[end].de == key2.de && a[end].id < key2.id)
				break;

		}
		a[begin] = a[end];
		for (; a[begin].de + a[begin].cai >= key && begin < end; begin++)
		{
			if (a[begin].de + a[begin].cai == key && a[begin].de < key2.de)
				break;
			if (a[begin].de + a[begin].cai == key && a[begin].de == key2.de && a[begin].id > key2.id)
				break;
		}
		a[end] = a[begin];
	}
	a[begin] = key2;
	int keyi = begin;
	qsort(a, left, keyi - 1);
	qsort(a, keyi + 1, right);
}

1.读取三个数字

2.设置4个结构数组

根据题目要求 数组会很大 如果只放在main函数里会导致数组过大而报错

因而参考vs给出得到解决方案和csdn 将结构数组设置为全局变量 这样就可以使数组很大

3.判断后读入数组

判断比较好搞 就是要好好读清楚题目 然后将数据分配进对应数组

4.进行数组内排序

这是这道题的最大收获 前面的内容都还是偏基础 只要好好读题同时有一定的动手能力就行

但这个部分就要求用算法 还是优化的排序算法 这样才能达到时间要求

在尝试冒泡排序无效后 我们直接自学快速排序的递归版

在学习排序时也积累了一些经验 我们移步另一个博客

总之这个算法算是学到了 并且实现了简单学习到复杂使用

5.输出加输出格式

格式的话这次我也直接用用函数来表示了 比较省空间 

以后也应该学会多多使用函数 这样其实是可以便于检查哪个部分出了差错 且在更改部分方案的时候也很有帮助

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/330651.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号