首页 > 试题广场 >

降温(easy)

[编程题]降温(easy)
  • 热度指数:2666 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
天气开始降温了。

如果某一天的温度比前一天降低的值不小于x,小红就会认为这是一场“寒潮”。
现在给定了每天的气温,但有一些日子的气温是未知的。小红想知道,发生寒潮的次数的最大值和最小值是多少?
注:我们认为,每天气温的值域一定在[-50,50]。

输入描述:
第一行输入两个正整数n,x,代表总天数、以及寒潮的判定标准。
第二行输入n个整数a_i,代表每天的气温。特殊的,如果a_i为-999,代表这一天的气温是未知的。

1\leq n,x \leq 100
-50 \leq a_i \leq 50或者a_i=-999


输出描述:
两个整数,代表寒潮数量的最大值和最小值。
示例1

输入

3 10
50 -999 -50

输出

2 1

说明

第二天的气温未知,若这一天的气温在[41,50]或者[-50,-41],则共有1天寒潮;否则是两天寒潮。
示例2

输入

4 100
-999 -999 -999 -999

输出

2 0

说明

当且仅当四天的气温为50,-50,50,-50时才会有2天寒潮。
小白第一次写题解,这里应该算是用了贪心?
#include <stdio.h>
int a[105];
int a_cp[105];
int main() {
    int n, x;
    scanf("%d%d", &n, &x);
    for(int i = 1; i <= n; i++) scanf("%d", &a[i]);

    a[0] = -50, a[n+1] = 50;
    for(int k = 0; k <= n+1; k++) a_cp[k] = a[k]; //复制数组
    
    for(int j = 1; j <= n; j++){  
        if(a[j] == -999){
            if(a[j-1] - x < -50) a[j] = 50;
            else a[j] = a[j-1] - x;
        }
    }//最大的情况

    for(int j = 1; j <= n; j++){
        if(a_cp[j] == -999){
            if(a_cp[j-1] - x < -50) a_cp[j] = -50;
            else a_cp[j] = a_cp[j-1] - x + 1;
        }
    }//最小
    
    int max = 0, min = 0;
    for(int i = 1; i <= n; i++) if(a[i] - a[i+1] >= x) max++;
    for(int i = 1; i <= n; i++) if(a_cp[i] - a_cp[i+1] >= x) min++;
    printf("%d %d\n", max, min);

    return 0;
}
欢迎讨论交流,指正错误!
发表于 2025-12-07 22:41:14 回复(0)