奖金发放(YOJ2.0中的题)

一道相对简单的题,刚开始我思路还做错了,不过所幸后面改正成功

记录利润的变量是不能改变的,因为一直要与分界值比较

关于中间截断的值的大小,我是用后一个分界值减前一个分界值,当然我特意设置数组长度为n + 1,第一个元素是0

然后很简单就做出来了

代码如下:

#include<stdio.h>

int main(void)
{
    int n, num;
    scanf("%d", &n);
    double bonus = 0.0;
    int interval[n + 1];
    double rate[n + 1];
    interval[0] = 0;
    for(int i = 1; i <= n; i++)
        scanf("%d%lf", &interval[i], &rate[i]);
    scanf("%d", &num);

    //处理
    for(int i = 1; 1; i++)
    {
        if(i == n)
        {
            bonus += (double)(num - interval[i - 1]) * rate[i];
            break;
        }
        if(num >= interval[i])
            bonus += (double)(interval[i] - interval[i - 1]) * rate[i];
        else
        {
            bonus += (double)(num - interval[i - 1]) * rate[i];
            break;
        }
    }

    if(num < 0)
        printf("NO");
    else
        printf("%.2f", bonus);
    
    return 0;
}

刚开始教的时候是Compile error,虽然我觉得并没有

被指出有问题的语句:int interval[n + 1] = {0};

我是不知道有什么错啦