PAT1053 住房空置率 (20 分)

心得

这么简单的题,做了俩小时啊。

第一个小时用来发现第前两个个误解题意的地方,第二个小时用来发现第三个误解题意的地方。

一直有两个测试用例不通过,改来改去,最后直接对比别人的代码,一行一行改啊。

还是那句话:
仔细读题!!!
仔细读题!!!
仔细读题!!!

这题有几个坑,都是读题不仔细造成的:
(1) 边界问题,“超过”,“低于”都是没有等号的
(2)“可能空置”和“空置”是互斥的,一个房子不可能同时具有这两种属性
(3)每一行开头已经给出这一行的总个数了,不需要自己判断、分割数字
(4)若观察期超过某给定阈值 D 天,是“观察期”,不是“可能空置”期!

其实没有必要定义class,读取一个数据,就判断一个数据即可。甚至都不需要数组。

题目

在这里插入图片描述

#include<iostream>
using namespace std;
class Room
{
public:
	double power[1000] = { 0 };
	double days = 0;
	int freeDays=0;
	bool mayFreeRoom = false;
	bool freeRoom = false;
};
int main()
{
	double totalRoom;
	double minPower;
	double minDay;

	cin >> totalRoom >> minPower >> minDay;

	//输入
	Room room[1000];
	int i,j;
	int curDay = 0;
	getchar();//吸收回车
	for (i = 0; i < totalRoom;i++)
	{
		cin >> room[i].days;
		for (j = 0; j < room[i].days; j++)
		{
			cin >> room[i].power[j];
		}
	}

	//判断
	for (i = 0; i < totalRoom; i++)
	{
		for (j = 0; j < room[i].days; j++)
		{
			if (room[i].power[j] < minPower)
			{
				room[i].freeDays++;
			}
		}
		if (room[i].freeDays > room[i].days/2)//可能空闲
		{
			if (room[i].days > minDay)//空闲
			{
				room[i].freeRoom = true;
			}
			else room[i].mayFreeRoom = true;
		}
		
	}

	//计算
	double totalMayFree=0;
	double totalFree=0;
	for (i = 0; i < totalRoom; i++)
	{
		if (room[i].mayFreeRoom == true)
		{
			totalMayFree++;
		}
		if (room[i].freeRoom == true)
		{
			totalFree++;
		}
	}
	//printf("%.1lf%% %.1lf%%", 100.0*totalMayFree / totalRoom, 100.0*totalFree / totalRoom);
	printf("%.1lf%% %.1lf%%\n", (double)(totalMayFree / totalRoom) * 100.0, (double)(totalFree / totalRoom) * 100.0);

	system("pause");
}

猜你喜欢

转载自blog.csdn.net/sinat_42483341/article/details/87996126
今日推荐