题解 | #买铅笔#
买铅笔
https://ac.nowcoder.com/acm/problem/16437
循环体 不断更新ans的值 从而实现不用min函数的时候实现遍历求出最小值
另外 为了简化复杂度 本题使用倍增思想
#include
using namespace std;
int main(){
int i,j,k,n,m,w,ans;
cin >>n;
ans = 0;
for(i=0;i<3;i++){
cin>> j >> k;m=j;w=k;//输入并存下初始的数量与价格
while(j<n){j<<=1;k<<=1;}//数量与价格不断*2直到数量大于n
while(j>n){j-=m;k-=w;}//*2有可能导致买太多了,减去一些
while(j<n){j+=m;k+=w;}//减去之后又可能太少了,加上一些
//其实就是大幅度地上调,然后做一些微调
if(k<ans||ans==0)ans=k;//判断是否是最小花费
}
cout << ans;
return 0;//输出并返回
}
