洛谷P1909-买铅笔
大家来看一道简单的题,第一次写的时候我过了一半,看了半天自己的代码,还感觉没问题,还是学艺不精啊
先看题目
#include <iostream>
using namespace std;
int n;//要买的铅笔数
int n1,m1;
int n2,m2;
int n3,m3;
int d1,d2,d3;
int main() {
long int mindollar=9999999;
cin>>n;
cin>>n1>>m1;
cin>>n2>>m2;
cin>>n3>>m3;
int t1 = (n/n1)+1;//买第一种包装的数量,向上取整
d1 = t1*m1;
if(d1< mindollar)
mindollar = d1;
int t2 = (n/n2)+1;
d2 = t2*m2;
if(d2< mindollar)
mindollar = d2;
int t3 = (n/n3)+1;
d3 = t3*m3;
if(d3< mindollar)
mindollar = d3;
cout<<mindollar;
return 0;
}
不知道大家看出问题了吗问题是这句
int t1 = (n/n1)+1;//买第一种包装的数量,向上取整
我不管能不能整除都+1向上取整,我当时想的是,万一不能整除/会向下去整,而多出去的部分显然也是要再买一份的,但是如果刚好够是不用再多买一份的,所以我后面改成了这个
if(n%n1!=0)
t1+=1;
只有不能整除的时候才+1,这样就全过啦
这是修改后的代码
#include <iostream>
using namespace std;
int n;//要买的铅笔数
int n1,m1;
int n2,m2;
int n3,m3;
int d1,d2,d3;
int main() {
long int mindollar=9999999;
cin>>n;
cin>>n1>>m1;
cin>>n2>>m2;
cin>>n3>>m3;
int t1 = n/n1;//买第一种包装的数量,向上取整
if(n%n1!=0)
t1+=1;
d1 = t1*m1;
if(d1< mindollar)
mindollar = d1;
int t2 = n/n2;
if(n%n2!=0)
t2+=1;
d2 = t2*m2;
if(d2< mindollar)
mindollar = d2;
int t3 = n/n3;
if(n%n3!=0)
t3+=1;
d3 = t3*m3;
if(d3< mindollar)
mindollar = d3;
cout<<mindollar;
return 0;
}