气象学上常采用“滑标”的方法判断季节的变化,方法如下:
首先先求出每一天的 “日平均气温” ,然后从这些日期中的第五天开始,计算每一天的“ $5$ 天滑动均值”,即选取这一天以及这一天之前的 $4$ 天构成一个共 $5$ 天的“滑动组”,求出平均值,将这个平均值记为这一天的“ $5$ 天滑动均值”。
当出现连续 $5$ 个低于 $10$ 的“ $5$ 天滑动均值”时,即判断“入冬成功”,并从这其中的第一个“滑动组”中,找到其中第一个“日平均气温”低于 $10$ 的天数,并将这一天称为 “入冬日”。
多组数据输入,每组数据两行。
第一行为总天数 $n$ ;
第二行, $n$ 个保留了一位小数的浮点数 $t$,表示过去 $n$ 天的 日平均气温 ,保证第 $1$ 天的气温高于 $10$ 度。
保证 $12\le n \le 100, -50\le t \le 50$ ,判断组数不超过 $100$ 组。
对于每组数据,输出一行。
若入冬成功,则输出一个字符串 Success
,然后空一格,输出“入冬日”所在的天数。
若入冬失败,则输出一个字符串 Failure
。
14
12.5 10.9 9.9 7.8 9.5 7.8 8.9 11.8 10.8 10.9 15.2 14.5 14.8 9.4
15
11.5 11.9 12.7 9.9 10.2 8.0 8.0 9.6 9.8 10.8 11.2 9.4 9.8 12.8 11.1
Failure
Success 4
对于第二组数据:
第5天的 5天滑动均值 为 $\dfrac{11.5+11.9+12.7+9.9+10.2}{5}=11.24\ge10$ ;
第6天的 5天滑动均值 为 $\dfrac{11.9+12.7+9.9+10.2+8.0}{5}=10.54\ge10$ ;
第7天的 5天滑动均值 为 $\dfrac{12.7+9.9+10.2+8.0+8.0}{5}=9.76<10$ ;
第8天的 5天滑动均值 为 $\dfrac{9.9+10.2+8.0+8.0+9.6}{5}=9.14<10$ ;
第9天的 5天滑动均值 为 $\dfrac{10.2+8.0+8.0+9.6+9.8}{5}=9.12<10$ ;
第10天的 5天滑动均值 为 $\dfrac{8.0+8.0+9.6+9.8+10.8}{5}=9.24<10$ ;
第11天的 5天滑动均值 为 $\dfrac{8.0+9.6+9.8+10.8+11.2}{5}=9.88<10$,满足“连续5个”的条件 。
所以应从第 3 天开始回溯,找到第一个低于 10 度的日期为第 4 天,找到结果。
#include<stdio.h>
#include<string.h>
int main()
{
int n,cnt=0,flag=0;
double t[110],sum[110];
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)
scanf("%lf",&t[i]);
memset(sum,0,sizeof(sum));
for(int i=1;i<=5;i++)
sum[4]+=t[i];
for(int i=1;i<=n;i++)
{
sum[i]=sum[i-1]-t[i-4]+t[i];
if(sum[i]<50.0)
cnt++;
if(cnt>=5)
{
flag=1;
for(int j=i-9;j<=i;j++)
if(t[j]<10.0)
printf("Sucsess %d\n",j);
break;
}
}
if(flag)
printf("Failure\n");
}
return 0;
}
国家标准 GB/T 42074-2022 气候季节划分
Author:某咸鱼同学
Code: Wh04m1