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

PTA题目集8:3 辛苦的楼长

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

PTA题目集8:3 辛苦的楼长

题目

疫情防控期间,要尽最大努力的保障同学们饮食!楼长们正在统计订饭的人数,一共是三个园区的统计表放在了一个文档里,有一些粗心的同学没有分清园区,错误的将自己的信息填到了其他园区的统计表上。身为帮助楼长的热心同学,你需要写一个程序将所有同学分到正确的园区并统计各个园区需要准备的早饭、午饭、晚饭的份数。

输入格式:

三组数据,每一组代表错误的园区的统计表。

每一组数据第一行是这个统计表上的信息数目n。
该组数据第2行到第n+1行是具体的信息,分别是:宿舍楼(格式为“园区(拼音,松:song,菊:jv,柳:liu)+楼号(数字)”中间无空格,例如“jv4”就表示菊园四号楼),宿舍号,早饭订饭数量,午饭订饭数量,晚饭订饭数量(某个寝室的信息只提交一次,不会重复)。

输出格式:

三组数据,分别代表三个园区的数据状况,按照“松-菊-柳”的顺序输出。

每组数据第一行有四个数,分别是该园区实际订餐的寝室数目,该园区总共订的早餐数目,午餐数目,晚餐数目。

然后输出该园区的所有正确的订单信息,排序输出(保证楼号非递减输出,若是楼号相同的订单则按找寝室号递增输出)。

输入样例:

在这里给出一组输入。例如:

4
song6 321 1 2 1
jv4 422 6 6 6
liu2 211 4 5 3
jv1 331 1 5 4
1
song2 333 6 6 6
1
jv6 612 2 3 3
输出样例:
2 7 8 7
song2 333 6 6 6
song6 321 1 2 1
3 9 14 13
jv1 331 1 5 4
jv4 422 6 6 6
jv6 612 2 3 3
1 4 5 3
liu2 211 4 5 3
数据范围

楼号保证在范围[0-9],房号范围为(100~999),订餐数目总数小于1000,每个园区订餐信息不超过20条。

题解 分析

使用结构体即可。

  1. 储存信息先使用一个结构体Park_area存储寝室总数、早中晚餐数和每个寝室的信息(这个使用一个新的结构体book来储存,实际上可以直接用一个二维数组来储存没必要再使用一个结构体(是我傻逼了))。
  2. 进行排序,编写排序函数,对三个园区的订餐信息分别进行排序
  3. 这个比较简单,直接输出就行了
代码
#include
#include

void sort(int arr[][5], int total);
void swap1(int arr[][5], int a, int b);
void swap2(int arr[][5], int a, int b);

int main()
{
	struct book
	{
		int arr[20][5];//楼号 寝室号 早 中 晚
	};
	struct Park_area
	{
		int total_room;//寝室总数
		int total_zao;//早饭总数
		int total_zhong;//午饭总数
		int total_wan;//晚饭总数   
		struct book num;
	};
	struct Park_area
		song = { 0, 0, 0, 0, {0} },
		jv = { 0, 0, 0, 0, {0} },
		liu = { 0, 0, 0, 0, {0} };

	// 输入数据
	for (int i = 0; i < 3; i++)
	{
		int n;
		scanf("%d", &n);
		getchar();
		for (int j = 0; j < n; j++)
		{
			char a;
			a = getchar();
			if (a == 's')
			{
				char str[5];
				scanf("%s %d %d %d %d", str, &song.num.arr[song.total_room][1], &song.num.arr[song.total_room][2], &song.num.arr[song.total_room][3], &song.num.arr[song.total_room][4]);
				song.num.arr[song.total_room][0] = str[3] - '0';
				song.total_zao += song.num.arr[song.total_room][2];
				song.total_zhong += song.num.arr[song.total_room][3];
				song.total_wan += song.num.arr[song.total_room][4];
				song.total_room++;
			}
			if (a == 'l')
			{
				char str[5];
				scanf("%s %d %d %d %d", str, &liu.num.arr[liu.total_room][1], &liu.num.arr[liu.total_room][2], &liu.num.arr[liu.total_room][3], &liu.num.arr[liu.total_room][4]);
				liu.num.arr[liu.total_room][0] = str[2] - '0';
				liu.total_zao += liu.num.arr[liu.total_room][2];
				liu.total_zhong += liu.num.arr[liu.total_room][3];
				liu.total_wan += liu.num.arr[liu.total_room][4];
				liu.total_room++;
			}
			if (a == 'j')
			{
				char str[5];
				scanf("%s %d %d %d %d", str, &jv.num.arr[jv.total_room][1], &jv.num.arr[jv.total_room][2], &jv.num.arr[jv.total_room][3], &jv.num.arr[jv.total_room][4]);
				jv.num.arr[jv.total_room][0] = str[1] - '0';
				jv.total_zao += jv.num.arr[jv.total_room][2];
				jv.total_zhong += jv.num.arr[jv.total_room][3];
				jv.total_wan += jv.num.arr[jv.total_room][4];
				jv.total_room++;
			}
			getchar();
		}
	}

	//排序
	sort(song.num.arr, song.total_room);
	sort(jv.num.arr, jv.total_room);
	sort(liu.num.arr, liu.total_room);

	//输出
	
	//song
	printf("%d %d %d %dn", song.total_room, song.total_zao, song.total_zhong, song.total_wan);
	for (int i = 0; i < song.total_room; i++)
	{
		printf("song%d %d %d %d %dn", song.num.arr[i][0], song.num.arr[i][1], song.num.arr[i][2], song.num.arr[i][3], song.num.arr[i][4]);
	}
	//jv
	printf("%d %d %d %dn", jv.total_room, jv.total_zao, jv.total_zhong, jv.total_wan);
	for (int i = 0; i < jv.total_room; i++)
	{
		printf("jv%d %d %d %d %dn", jv.num.arr[i][0], jv.num.arr[i][1], jv.num.arr[i][2], jv.num.arr[i][3], jv.num.arr[i][4]);
	}
	//liu
	printf("%d %d %d %dn", liu.total_room, liu.total_zao, liu.total_zhong, liu.total_wan);
	for (int i = 0; i < liu.total_room; i++)
	{
		printf("liu%d %d %d %d %d", liu.num.arr[i][0], liu.num.arr[i][1], liu.num.arr[i][2], liu.num.arr[i][3], liu.num.arr[i][4]);
		if (i < liu.total_room - 1)
		{
			printf("n");
		}
	}
	return 0;
}
void sort(int arr[][5], int total)
{
	for (int i = 0; i < total - 1; i++)
	{
		for (int j = 0; j < total - 1 - i; j++)
		{
			if (arr[j][0] > arr[j + 1][0])
			{
				swap1(arr, j, j + 1);
			}
			if (arr[j][0] == arr[j + 1][0])
			{
				if (arr[j][1] > arr[j + 1][1])
				{
					swap2(arr, j, j + 1);
				}
			}
		}
	}
}
void swap1(int arr[][5], int a, int b)
{
	int n = 0;
	for (int i = 0; i < 5; i++)
	{
		n = arr[a][i];
		arr[a][i] = arr[b][i];
		arr[b][i] = n;
	}
}
void swap2(int arr[][5], int a, int b)
{
	int n = 0;
	for (int i = 1; i < 5; i++)
	{
		n = arr[a][i];
		arr[a][i] = arr[b][i];
		arr[b][i] = n;
	}
	
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/890384.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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