P1567 统计天数 统计天数 题目描述 炎热的夏日,KC非常的不爽。他宁可忍受北极的寒冷,也不愿忍受厦门的夏天。最近,他开始研究天气的变化。他希望用研究的结果预测未来的天气。 经历千辛万苦,他收...

本文介绍了一个C语言程序,用于统计输入的每日气温中连续上升的最长天数。通过遍历数组并比较相邻元素,程序能准确计算出连续气温上升的最长序列。
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i, N, n, m;
    int temp[10000000]; //数组要开足够大,不然(..>^^>..)
    scanf("%d", &N);
    for (i = 0; i < N; i++)
    {
        scanf("%d", &temp[i]);
    }
    n = 1;
    m = 0;
/*有两种输入情况:一、输入连续型数据 (1 2 3 4 5 6){不过这种情况与题目无关...}
                二、输入非连续型 (1 2 3 2 4 5 6)*/
    for (i = 0; i < N-1; i++)   //循环遍历
    {
        if (temp[i] < temp[i+1])    //如果温度在持续上升,则n++计数
        {
            n++;    //统计连续气温上升天数
    /*对待第一种情况输入数据(1 2 3 4 5 6)做的判断*/
            if (n > m)  //比较当前最高气温连续天数和历史气温连续天数,如果前者大则将n赋值给m  
            {
                m = n;
            }
        }
        else    //如果降温了(连续升温被打断了)
        {
        /*对待第二种情况输入数据(1 2 3 2 4 5 6)做的判断*/
            if (n > m)  //比较当前最高气温连续天数和历史气温连续天数,如果前者大则将n赋值给m
            {
                m = n;
            }
            n = 1;  //计数器n清零
        }

    }
    printf("%d", m);
    return 0;
}

转载于:https://www.cnblogs.com/Tristan-Adams/p/9880004.html

<think>我们需要根据不固定的天数进行统计,这意味着用户可能指定任意天数间隔(如3天、7天等)来分组数据。 思路: 1. 将日期字符串转换为Date对象,便于计算。 2. 确定一个起始日期(可以是数据中的最小日期或指定的日期)。 3. 根据指定的天数间隔,计算每个日期所属的分组(每个分组的开始日期)。 4. 按照分组进行累加。 注意:由于天数间隔不固定,分组可能会跨越月份或年份。 实现步骤: - 将日期字符串转为时间戳,便于计算 - 找到最小日期作为起始点(也可以自定义起始日期) - 根据间隔天数,计算每个日期所属的时间段(时间段开始日期) - 使用时间段开始日期作为分组键进行累加 示例:假设间隔天数为7天(一周),则每个分组为从起始日期开始的每7天。 代码实现如下(假设天数为intervalDays,由用户指定): </think>以下是使用JavaScript按照不固定天数统计`dtsNum`的实现方法: ```javascript /** * 按指定天数统计dtsNum总和 * @param {Array} data 原始数据数组 * @param {number} dayInterval 统计间隔天数 * @returns {Object} 包含日期分组和对应数值的两个数组 */ function groupByCustomDays(data, dayInterval) { // 1. 日期转换和排序 const sortedData = data .map(item => ({ date: new Date(item.createTime), dtsNum: item.dtsNum })) .sort((a, b) => a.date - b.date); // 2. 确定日期范围 const minDate = sortedData[0].date; const maxDate = sortedData[sortedData.length - 1].date; // 3. 创建分组容器 const result = {}; const groupStarts = []; // 4. 生成时间分段起点 let current = new Date(minDate); while (current <= maxDate) { const groupKey = current.toISOString().slice(0, 10); result[groupKey] = 0; groupStarts.push(groupKey); current.setDate(current.getDate() + dayInterval); } // 5. 数据分组统计 sortedData.forEach(item => { const diffDays = Math.floor((item.date - minDate) / (1000 * 60 * 60 * 24)); const groupIndex = Math.floor(diffDays / dayInterval); if (groupIndex < groupStarts.length) { const groupKey = groupStarts[groupIndex]; result[groupKey] += item.dtsNum; } }); // 6. 格式化成两个数组 const dateArray = Object.keys(result); const valueArray = Object.values(result); return { dateArray, valueArray }; } // 使用示例 const interval = 7; // 指定天数间隔(如7天一组) const { dateArray, valueArray } = groupByCustomDays(data, interval); console.log(dateArray); // 分组起始日期数组 ['2025-09-01', '2025-09-08'...] console.log(valueArray); // 对应分组的值数组 [15, 22, ...] ``` **实现原理:** 1. **日期预处理**:将所有日期转为Date对象并排序 2. **确定范围**:找出最小和最大日期作为统计范围 3. **创建分组**:按指定天数间隔生成分组起点日期 4. **分配数据**:计算每个日期所属的分组索引 5. **累加统计**:将dtsNum值累加到对应分组 6. **输出格式**:返回两个数组 - 分组起始日期数组和对应值数组 **关键参数说明:** - `dayInterval`:自定义分组天数(例如7表示每周统计) - 分组键为每个时间段的起始日期 - 包含时间范围外的数据处理机制 **使用示例:** - 按周统计:`groupByCustomDays(data, 7)` - 按10天统计:`groupByCustomDays(data, 10)` - 按半月统计:`groupByCustomDays(data, 15)`
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值