牛客买铅笔问题
#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;
}
应该某个地方思路错了,求指正
代码问题
在你的代码中存在几个问题:
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:}
在你的代码中,出现了一些问题:
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]