【刷题小记53】不高兴的小明

文章探讨了家长为孩子安排过多兴趣班与学校课程导致的过度劳累问题,通过具体案例分析了如何平衡学习与个人兴趣,避免孩子因长时间学习而感到不高兴。
描述
   小明又出问题了。妈妈认为聪明的小明应该更加用功学习而变的更加厉害,所以小明除了上学之外,还要参加妈妈为他报名的各科复习班。另外每周妈妈还会送他去学习朗诵、舞蹈和钢琴。但是小明如果一天上课超过八个小时就会不高兴,而且,上得越久就会越不高兴。假设小明不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下小明下周的日程安排,看看下周他会不会不高兴;如果会的话,哪天最不高兴。
输入
第一行输入N(0<N<100)表示测试数据组数,接下来每组测试数据输入包括七行数据,分别表示周一到周日的日程安排。每行包括两个小于10的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。 
输出

每组测试数据输出包括一行,这一行只包含一个数字。如果不会不高兴则输出0,如果会则输出最不高兴的是周几(用1,2,3,4,5,6,7分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的—天。


#include <stdio.h>
#include <stdlib.h>
int main()
{
	int school,hobby;
    int Cases;
    scanf("%d",&Cases);
    while(Cases--)
    {
		int i;
        int day=0;
        int total=0;
        for(i=1;i<=7;i++)
        {
			scanf("%d %d",&school,&hobby);
			if((school+hobby)>8)
            {
				if((school+hobby)>total)
                {
					total=school+hobby;
                    day=i;
                }
            }
        }
        if(!day)
        {
			printf("0\n");
        }else
        {
			printf("%d\n",day);
        }
    }
	return 0;
}


在数据库层面实现小记合计(如班级小计、学校合计、全县合计)通常面临若干技术挑战,这主要与关系型数据库的设计原则、查询性能以及数据聚合方式有关。以下是具体原因分析: 1. **数据库设计的范式限制** 关系型数据库通常遵循规范化设计原则,以减少数据冗余和提高数据一致性。在规范化设计下,数据被分散存储在多个表中,而小记合计需要跨行或跨表的聚合计算,这与数据库的范式设计完全匹配。例如,若学生信息和成绩信息分别存储在同的表中,则在数据库层面直接实现小记合计需要频繁的JOIN操作[^1]。 2. **SQL查询的复杂性** 实现小记合计通常需要使用窗口函数(如`ROW_NUMBER()`、`RANK()`)或子查询来标识每个分组的最后一条记录。虽然现代SQL支持这些功能,但在某些数据库系统中,尤其是旧版本,可能支持或支持完善。此外,使用`ORDER BY`子句结合聚合函数时,SQL语句的复杂性显著增加,可能导致性能下降[^2]。 3. **性能瓶颈** 小记合计通常涉及对大量数据的分组和排序操作,这在数据量较大时会导致显著的性能开销。例如,若需要按“学校、班级、学号”进行排序并插入小计记录,则每次查询都需要对整个数据集进行排序和分组,这会消耗大量计算资源。对于实时或高频查询场景,这种操作可能成为性能瓶颈[^1]。 4. **数据库的限制** 某些数据库系统(如SAP中的簇表BSEG)存在特定限制,例如支持`SELECT DISTINCT`、`GROUP BY`或`ORDER BY`后指定字段名等操作[^1]。在这种情况下,实现小记合计的SQL逻辑可能无法直接运行,或者需要绕过这些限制,增加了实现的复杂性。 5. **业务逻辑的灵活性** 小记合计通常涉及特定的业务逻辑,例如如何定义“班级小计”的位置或“学校合计”的计算方式。这些逻辑可能因业务需求变化而频繁调整,若直接在数据库层面实现,维护和更新成本较高。相比之下,在应用层处理这些逻辑更具灵活性,能够更方便地适应业务变化[^2]。 6. **数据展示的复杂性** 小记合计通常用于报表展示,而数据库本身并擅长直接生成结构化的报表格式。例如,在SQL查询结果中插入“班级小计”行需要额外的处理逻辑,而是简单的数据检索。这类操作更适合在应用层或报表工具中完成,例如使用BI工具或前端框架进行数据处理和展示。 ### 如何在数据库层面处理小记合计 尽管存在上述挑战,仍然可以通过以下方式在数据库层面实现小记合计: - **使用窗口函数** 窗口函数(如`ROW_NUMBER()`、`RANK()`)可以标识每个分组的最后一条记录,从而在查询结果中插入小计行。例如: ```sql SELECT 学校, 班级, 学号, 成绩, CASE WHEN ROW_NUMBER() OVER (PARTITION BY 班级 ORDER BY 学号 DESC) = 1 THEN '班级小计' ELSE '' END AS 小计标记 FROM 学生成绩表 ORDER BY 学校, 班级, 学号; ``` - **使用UNION ALL合并小计行** 可以先查询原始数据,再通过聚合查询生成小计行,并使用`UNION ALL`将两者合并。例如: ```sql SELECT 学校, 班级, 学号, 成绩, NULL AS 小计标记 FROM 学生成绩表 UNION ALL SELECT 学校, 班级, NULL AS 学号, AVG(成绩), '班级小计' FROM 学生成绩表 GROUP BY 学校, 班级 ORDER BY 学校, 班级, 学号; ``` - **使用存储过程或触发器** 对于复杂的业务逻辑,可以编写存储过程或触发器来动态生成小计行。这种方式适用于需要频繁更新或计算的场景。 - **优化索引和分区** 为了提高查询性能,可以在相关字段(如“学校”、“班级”、“学号”)上创建复合索引,或对表进行分区,以减少查询时的扫描范围。 综上所述,虽然在数据库层面实现小记合计存在一定的技术挑战,但通过合理的设计和优化,仍然可以实现这一需求。然而,考虑到灵活性和维护成本,通常建议在应用层或报表工具中处理小记合计逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值