有什么问题吗

P1909 [NOIP2016 普及组] 买铅笔

有问题的。 ```c++ if(b%a1!=0) a1=b/a1,a1+=1,c1*=a1; else a1=b/a1; c1*=a1; if(b%a2!=0) a2=b/a2,a2+=1,c2*=a2; else a2=b/a2; c2*=a2; if(b%a3!=0) a3=b/a3,a3+=1,c3*=a3; else a3=b/a3,c3*=a3; ``` 但是这个也是过不去的。95分。 --- 分析: ```c++ if(b%a1!=0) a1=b/a1,a1+=1,c1*=a1; else a1=b/a1; c1*=a1; ``` if判断条件为b%a1!=0. 若此判断条件正确,则进入第一个if,在第一个if更改了a1的值,更新完c1值后退出第一个if。再运行判断条件b%a1==0,但此时a1值被更改,于是很可能else也进去! 所以if尽量不要更改变量的值。 正确代码: ```c++ #include<bits/stdc++.h> using namespace std; int main(){ int b,i=0,a1,c1,a2,c2,a3,c3; cin>>b>>a1>>c1>>a2>>c2>>a3>>c3; if(b%a1!=0) c1=(b/a1+1)*c1; else c1=(b/a1)*c1; if(b%a2!=0) c2=(b/a2+1)*c2; else c2=(b/a2)*c2; if(b%a3!=0) c3=(b/a3+1)*c3; else c3=(b/a3)*c3; cout<<min(c1,min(c2,c3)); return 0; } ```
by stOtue @ 2023-07-30 18:41:51


@[123uuu](/user/539712)
by stOtue @ 2023-07-30 18:47:03


@[stOtue](/user/411727) 谢谢
by 123uuu @ 2023-07-30 19:16:24


@[123uuu](/user/539712) 亦可如下,规避if: ```cpp #include <bits/stdc++.h> using namespace std; int main() { int n,a,b,c,minn=2147483647; cin >> n; for (int i = 0; i < 3; i++){ cin >> a >> b; c = n % a == 0 ? n / a * b : (n / a + 1) * b; minn=min(minn,c); } cout << minn; return 0; } ```
by mlemtion @ 2023-08-07 23:55:06


|