PAT乙级1053

1053. 住房空置率 (20)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

在不打扰居民的前提下,统计住房空置率的一种方法是根据每户用电量的连续变化规律进行判断。判断方法如下:

  • 在观察期内,若存在超过一半的日子用电量低于某给定的阈值e,则该住房为“可能空置”;
  • 若观察期超过某给定阈值D天,且满足上一个条件,则该住房为“空置”。

现给定某居民区的住户用电量数据,请你统计“可能空置”的比率和“空置”比率,即以上两种状态的住房占居民区住房总套数的百分比。

输入格式:

输入第一行给出正整数N(<=1000),为居民区住房总套数;正实数e,即低电量阈值;正整数D,即观察期阈值。随后N行,每行按以下格式给出一套住房的用电量数据:

K E1 E2 ... EK

其中K为观察的天数,Ei为第i天的用电量。

输出格式:

在一行中输出“可能空置”的比率和“空置”比率的百分比值,其间以一个空格分隔,保留小数点后1位。

输入样例:
5 0.5 10
6 0.3 0.4 0.5 0.2 0.8 0.6
10 0.0 0.1 0.2 0.3 0.0 0.8 0.6 0.7 0.0 0.5
5 0.4 0.3 0.5 0.1 0.7
11 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1
11 2 2 2 1 1 0.1 1 0.1 0.1 0.1 0.1
输出样例:
40.0% 20.0%

(样例解释:第2、3户为“可能空置”,第4户为“空置”,其他户不是空置。)

#include<iostream>
using namespace std;

int main() {
	int N, D;
	double e;
	cin >> N >> e >> D;
	int num = 0;
	int flag[1000] = { 0 };
	while (num++ < N) {
		int day, low_day = 0;
		cin >> day;
		double data;
		for (int i = 0; i < day; i++) {
			cin >> data;
			if (data < e)
				low_day++;
		}
		if (low_day > (int)(day / 2)) {
			if (day > D)
				flag[num - 1] = 2;
			else flag[num - 1] = 1;
		}
	}

	int num1 = 0, num2 = 0;
	for (int i = 0; i < N; i++) {
		if (flag[i] == 1)
			num1++;
		if (flag[i] == 2)
			num2++;
	}
	printf("%.1f%% %.1f%%", (double)num1 / N * 100, (double)num2 / N * 100);
	cout << endl;
	system("pause");
	return 0;
}


### 关于 PAT 乙级 C语言 题目1053 的解题思路 目前未找到针对 PAT 乙级 C语言 题目1053 的具体描述或官方文档。然而,基于以往的经验和其他相似题目[^1],可以推测该类题目通常涉及数据处理、字符串操作或者算法设计等内容。 #### 假设题目背景 假设题目要求统计某些特定条件下学生的成绩分布情况(类似于题目1038),则可以通过以下方式实现: 1. **输入解析**: 使用 `scanf` 或者其他标准库函数读取输入数据。 2. **数据存储**: 利用数组或其他容器结构保存学生成绩及其对应的学生数量。 3. **逻辑判断**: 对每个查询分数进行匹配并输出符合条件的结果。 4. **边界条件**: 特别注意当 k 超过一定范围时可能存在的重复查询需求。 以下是基于上述假设的一个通用解决方案框架: ```c #include <stdio.h> #define MAX_SCORE 101 // 根据实际情况调整最大分值定义 int main(){ int scores[MAX_SCORE]={0}; // 初始化计数器数组 int n,k; scanf("%d",&n); for(int i=0;i<n;i++){ int score; scanf("%d",&score); if(score>=0 && score<MAX_SCORE){ scores[score]++; } } scanf("%d",&k); while(k--){ int queryScore; scanf("%d",&queryScore); if(queryScore >=0 && queryScore < MAX_SCORE ){ printf("%d\n",scores[queryScore]); }else{ printf("Invalid Score\n"); } } return 0; } ``` 此代码片段展示了如何通过简单的循环和条件语句来完成基本的成绩统计功能,并能够应对多次相同请求的情形。 另外,在涉及到字符串解析的情况下,可借鉴如下技巧用于分离复合型输入中的数值部分[^2]: ```c #include <stdio.h> int main() { char inputStr[] = "Your mixed string with numbers like 123 and 456."; int numberBuffer; /* 提取第一个整数 */ sscanf(inputStr, "%*[^0-9]%d", &numberBuffer); printf("First Number Extracted: %d\n", numberBuffer); return 0; } ``` 以上例子说明了利用格式化输入函数可以从复杂文本中抽取所需的数字信息。 最后提醒一点就是对于大规模的数据集运算效率考量非常重要[^4][^5],因此建议尽可能采用高效排序算法以及合理剪枝策略减少不必要的计算开销。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值