心得
这么简单的题,做了俩小时啊。
第一个小时用来发现第前两个个误解题意的地方,第二个小时用来发现第三个误解题意的地方。
一直有两个测试用例不通过,改来改去,最后直接对比别人的代码,一行一行改啊。
还是那句话:
仔细读题!!!
仔细读题!!!
仔细读题!!!
这题有几个坑,都是读题不仔细造成的:
(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");
}