lsmCC 发表于 2023-9-30 15:18:09

牛客买铅笔问题

#include <stdio.h>
int main()
{
    int n,a,b,o,l={0},min;
    scanf("%d",&n);
    for(int i=0;i<3;i++)
    {
      scanf("%d %d",&a,&b);
      
      l=ceil(n/a)*b;
      min =l;
      for(int j=0;j<3;j++)
      {
            if(min>l)
                min=l;
      }
      
      
      
    }
    printf("%lf",min);
    return 0;
}


应该某个地方思路错了,求指正
   

Mike_python小 发表于 2023-9-30 15:18:34

代码问题

在你的代码中存在几个问题:

1. 在循环开始时,你定义了一个数组 l 来保存三种不同铅笔包装的价格。但在后面的代码中,你将 l 赋值为一个 double 类型的值,这是错误的。你应该创建一个 double 类型的数组来保存计算得到的价格。

2. 在计算每种铅笔包装的价格时,你使用了 ceil(n/a) 来计算需要购买的包装数量,但在 C 语言中,整数除法的结果仍然是整数,即会向下取整。所以你需要将其中一个操作数转换为 double 类型,以得到正确的结果。

3. 在找到最小价格时,你使用了一个变量 min 来保存最小值,但你没有正确地初始化它。在比较之前,应该将 min 初始化为一个足够大的值,以确保它会被正确更新。

下面是修正后的代码:


#include <stdio.h>
#include <math.h>

int main()
{
    int n, a, b;
    double min = INFINITY;
    scanf("%d", &n);

    for (int i = 0; i < 3; i++)
    {
      scanf("%d %d", &a, &b);
      double price = ceil((double)n / a) * b;
      if (price < min)
            min = price;
    }

    printf("%.lf\n", min);
    return 0;
}


修正后的代码使用了 double 类型的变量来保存价格,并将其中一个操作数转换为 double 类型以进行精确的除法。同时,在比较之前正确地初始化了 min 变量。

希望这可以帮助到你!如果有任何问题,请随时提出。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

陶远航 发表于 2023-9-30 15:19:14

在你的代码中,出现了一些问题:

1. 数组 l 的定义应该是 double l = {0},因为 ceil() 函数返回的是 double 类型的值。

2. l 数组的赋值操作是错误的,应该使用下标对单个元素进行赋值。

3. ceil() 函数需要包含头文件 math.h。

4. printf() 函数中输出 %lf 会输出一个 double 类型的值,但是题目要求输出一个整数,所以应该使用 %d。

5. min 没有初始化,如果 l 数组中的值都大于 n,那么 min 的值有可能会是一个随机值,因此需要初始化 min 为一个较大的值。

请参考以下修改后的代码:

#include <stdio.h>
#include <math.h>

int main() {
    int n, a, b;
    double l = {0};
    scanf("%d", &n);
    for (int i = 0; i < 3; i++) {
      scanf("%d %d", &a, &b);
      l[ i] = ceil(n * 1.0 / a) * b;
    }
    int min = l;
    for (int j = 0; j < 3; j++) {
      if (min > l)
            min = l;
    }
    printf("%d", min);
    return 0;
}


在修改后的代码中,我们通过使用 ceil(n * 1.0 / a) 计算出购买铅笔的最小花费,然后在 l 数组中保存这个值。接着,我们遍历 l 数组,找到其中的最小值并将其输出。

需要注意的是,由于可能存在整数除法向下截断的问题,因此需要将 n 转换成浮点数,即 n * 1.0 / a,这样才能保证计算结果是正确的。
如果问题已经解决,请设置最佳答案
页: [1]
查看完整版本: 牛客买铅笔问题