「PAT乙级真题解析」Basic Level 1053 住房空置率 (问题分析+完整步骤+伪代码描述+提交通过代码)

题设要求统计符合住房空置条件的房屋比例。这是一道统计题。 需要统计的数据是, 可能空置的房屋数量, 空置的房屋数量; 可能空置的条件: 比较每天的用电量是否小于给定用电量的天数, 如果天数超过一般, 则为可能空置. 空置的条件: 已经认定是可能空置的房间, 且比较用电量的天数大于给定天数。

#算法#数据结构#需求分析#c语言#pat考试

Table of Contents

乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范。从小白开始逐步掌握用编程解决问题。

PAT乙级BasicLevelPractice 1053

问题分析

题设要求统计符合住房空置条件的房屋比例。这是一道统计题。 需要统计的数据是, 可能空置的房屋数量, 空置的房屋数量; 可能空置的条件: 比较每天的用电量是否小于给定用电量,统计满足条件的天数, 如果天数超过一半, 则为可能空置. 空置的条件: 对于已经认定是可能空置的房间, 比较用电量的天数大于给定天数, 如果大于,则认为是空置。

完整步骤描述

  1. 获取输入: 房屋数量, 最低可能空置用电量, 最低空置观察天数
  2. 初始化可能空置的房屋计数器, 空置的房屋计数器
  3. 对于每一个房屋:
    • 获取观察天数
    • 初始化用电量低天数的计数器为0
    • 对于每一天的用电量:
      • 如果用电量小于阈值, 则天数计数器+1
    • 如果天数计数器的值的2倍大于观察天数且观察天数大于指定天数, 则空置的房屋计数器+1
    • 否则, 如果天数计数器的值的2倍大于观察天数, 则可能空置的房屋计数器+1
  4. 按格式输出可能空置和空置的比例

伪代码描述

  1. get input: house_amount, min_electricity, min_days

  2. init counter:

    • maybe_empty_house_amount
    • empty_house_amount
  3. for each house:

    • get input: observation_days and electricity of each day
    • init counter: low_electricity_days
    • for each electricity:
      • if electricity < min_electricity: low_electricity_days++
    • if low_electricity_days * 2 > observation_days and observation_days > min_days:
      • empty_house_amount++
    • else if low_electricity_days * 2 > observation_days:
      • maybe_empty_house_amount++
  4. calculate rate:

    • maybe_empty_house_rate = maybe_empty_house_amount / house_amount * 100
    • empty_house_rate = empty_house_amount / house_amount * 100
  5. print(maybe_empty_house_rate, empty_house_rate)

完整提交代码

/*
# 问题分析
题设要求统计符合住房空置条件的房屋比例。这是一道统计题。
需要统计的数据是, 可能空置的房屋数量, 空置的房屋数量;
可能空置的条件: 比较每天的用电量是否小于给定用电量,统计满足条件的天数, 如果天数超过一半, 则为可能空置.
空置的条件: 对于已经认定是可能空置的房间, 比较用电量的天数大于给定天数, 如果大于,则认为是空置。
 
# 完整步骤描述
1. 获取输入: 房屋数量, 最低可能空置用电量, 最低空置观察天数
2. 初始化可能空置的房屋计数器, 空置的房屋计数器
3. 对于每一个房屋:
    - 获取观察天数
    - 初始化用电量低天数的计数器为0
    - 对于每一天的用电量:
        - 如果用电量小于阈值, 则天数计数器+1
    - 如果天数计数器的值的2倍大于观察天数且观察天数大于指定天数, 则空置的房屋计数器+1
    - 否则, 如果天数计数器的值的2倍大于观察天数, 则可能空置的房屋计数器+1
4. 按格式输出可能空置和空置的比例
 
# 伪代码描述
1. get input: house_amount, min_electricity, min_days
2. init counter:
    - maybe_empty_house_amount
    - empty_house_amount
3. for each house:
    - get input: observation_days and electricity of each day
    - init counter: low_electricity_days
    - for each electricity:
        - if electricity < min_electricity: low_electricity_days++
    - if low_electricity_days * 2 > observation_days and observation_days > min_days:
        - empty_house_amount++
    - else if low_electricity_days * 2 > observation_days:
        - maybe_empty_house_amount++
 
4. calculate rate:
    - maybe_empty_house_rate = maybe_empty_house_amount / house_amount * 100
    - empty_house_rate = empty_house_amount / house_amount * 100
5. print(maybe_empty_house_rate, empty_house_rate)
 
*/
 
 
#include <stdio.h>
#define EPS 1e-6
 
int main() {
  int house_amount;
  double min_electricity;
  int min_days;
  scanf("%d %lf %d", &house_amount, &min_electricity, &min_days);
 
  int maybe_empty_house_amount = 0;
  int empty_house_amount = 0;
  int observation_days;
  double daily_electricity;
  for (int i = 0; i < house_amount; i++) {
    scanf("%d", &observation_days);
 
    int low_electricity_days = 0;
    for (int j = 0; j < observation_days; j++) {
      scanf("%lf", &daily_electricity);
      if (daily_electricity + EPS < min_electricity) {
        low_electricity_days++;
      }
    }
 
    if (low_electricity_days * 2 > observation_days && observation_days > min_days) {
      empty_house_amount++;
    } else if (low_electricity_days * 2 > observation_days) {
      maybe_empty_house_amount++;
    }
  }
 
  double maybe_empty_house_rate = (double)maybe_empty_house_amount / house_amount * 100;
  double empty_house_rate = (double)empty_house_amount / house_amount * 100;
 
  printf("%.1f%% %.1f%%", maybe_empty_house_rate, empty_house_rate);
 
  return 0;
}
「PAT乙级真题解析」Basic Level 1053 住房空置率 (问题分析+完整步骤+伪代码描述+提交通过代码) | 生活糖果