然后你的第一个for
by zhaohaoran0302 @ 2023-09-02 08:49:04
@[zhaohaoran0302](/user/798757)
还是不懂,第一个for哪里出问题了吗?
by compatibility @ 2023-09-02 13:01:07
你的代码是求每个套餐一支铅笔的价钱再乘上全部支数。
但题目说:“商店不允许将铅笔的包装拆开,因此 P 老师可能需要购买超过n支铅笔才够给小朋友们发礼物。”
所以这种做法是错的。
AC代码:```cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int minn=INT_MAX;
for(int i=1;i<=3;i++){
double x1,x2;//x1是支数,x2是价钱
cin>>x1>>x2;
int t=ceil(n/x1);//求要买几个套餐
minn=min(minn,(int)(t*x2));//更新最小值
}
cout<<minn;
return 0;
}
```
希望对你有帮助。
by ZWK210917 @ 2023-09-02 15:11:25
你的代码是求每个套餐一支铅笔的价钱再乘上全部支数。
但题目说:“商店不允许将铅笔的包装拆开,因此 P 老师可能需要购买超过n支铅笔才够给小朋友们发礼物。”
所以这种做法是错的。
AC代码:```cpp
include<bits/stdc++.h>
using namespace std;
int main(){
int n; cin>>n;
int minn=INT_MAX;
for(int i=1;i<=3;i++){
double x1,x2;//x1是支数,x2是价钱 cin>>x1>>x2;
int t=ceil(n/x1);//求要买几个套餐 minn=min(minn,(int)(t*x2));//更新最小值 } cout<<minn;
return 0; }
```
希望对你有帮助。
by ZWK210917 @ 2023-09-02 15:12:59
@[ZWK210917](/user/906826)
对啊,所以我后面加了一步,算出每个套餐一支铅笔的价钱再乘上全部支数之后把价格递增,直到能被一包铅笔的价格整除,这没啥问题吧,还是说哪里出错了?我在VS上前三个样例都能输出正确答案的..
by compatibility @ 2023-09-02 15:48:11
我一开始看错了。
程序本身没太大问题。只是”a = req * (x2 / x1);“这条语句有问题。因为有可能会出现无限小数。
比如:1500 100
100/1500=0.066666666666
当我天真地提交后:WA了一个点。
后来我发现精度不够。于是将float改成了 double
上代码:
```cpp
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
int main()
{
double req = 0;
scanf("%lf", &req);
double x1 = 0;
double x2 = 0;
int min =(1<<31)^(-1) ;
for (int i = 0; i < 3; i++)
{
double n = 0;
scanf("%lf", &x1);
scanf("%lf", &x2);
double a = 0;
a = req * x2 / x1;
int b = a;
if (a > b)
b += 1;
for (b; b % (int)x2 != 0; b++)
{
}
if (b< min)
{
min = b;
}
}
printf("%d", min);
return 0;
}
```
我的两个测试点啊!qwq
by ZWK210917 @ 2023-09-02 21:44:45