题意:

给出x,y两个值分别代表x个物品,总价为y

有两种变化:

1、使总价+1,数量不变

2、数量+1,总价跟着变化 (y = y + y / x)

思路:

给出目标x,y,计算最少变化次使数量变化的只有一种,所以至少需要x-1次变化。

每次增多数量的时候,先把单价提高到目标单价。(这样才会是最优解)

对于每一次增高单价,我们可以用 (int)(当前数量 * 目标单价 - 当前总价) 得到差值,这个差值,即变化的次数,因为一次变化1。

因为用了强转,所以会有精度问题,就是说我们在前面吧当前的单价变为了目标单价,但是由于强转,其实并没有单价一致,还需要继续变化

这里用for循环代表数量变化

剩下的用代码解释

#include<iostream>

using namespace std;

int main() {
double a, b;
while (~scanf("%lf %lf", &a, &b)) {
if (a > b) {
printf("-1\n");//无解情况
} else {
double index = (b + 1 - 1e-6) / a;
//因为给出的总价可能是取整的,还原精度,这里精度不能太高会出错
int ans = (int) a - 1;
//数量变化直接计入结果
double nowTotal = 1;
//当前总价
for (int i = 1; i <= (int) a; i++) {
int tmp = (int) (i * index - nowTotal);
//用当前数量*目标总价-当前总价=总价的差值,这也是变化的次数
nowTotal += tmp;
//改变当前总价
ans += tmp;
//计入变化次数
nowTotal = nowTotal * (i + 1) / i;
//这里用的for循环代表每次数量变化,当数量变化后,总价是需要变化的
}
printf("%d\n", ans);
}
}
return 0;
}

最新文章

  1. 使用css3制作蚂蚁线
  2. WCF基础教程之开篇:创建、测试和调用WCF
  3. div的显示和隐藏
  4. WEB前端常用网站收集
  5. Spring Controller 获取请求参数的几种方法
  6. 《DevOps故障排除:Linux服务器运维最佳实践》读书笔记
  7. Squish License
  8. CSS制作水平垂直居中对齐
  9. win8.1和centos6.5 双系统启动问题
  10. sqlserver修改增删改字段
  11. 用idea 创建一个spring小demo,基于xml文件配置
  12. 游戏编程算法与技巧 Game Programming Algorithms and Techniques (Sanjay Madhav 著)
  13. [leetcode]94. Binary Tree Inorder Traversal二叉树中序遍历
  14. Ubuntu 14.04 apt-get更换阿里云源
  15. r 随机数
  16. Git Diff 格式分析
  17. BZOJ3669 膜法森林 - LCT
  18. ADO----nDSN
  19. 雷林鹏分享:Ruby CGI方法
  20. ps -ef 输出具体含义

热门文章

  1. 国产手机没有google services 和google play崩溃,判断google services是否存在
  2. navicat导入.sql文件出错2006-MySQLserver has gone away
  3. Cpp module
  4. iOS核心动画以及UIView动画的介绍
  5. 什么是javascript闭包?
  6. UVaLive 6834 Shopping (贪心)
  7. Java 链式写法
  8. php insteadof 作用
  9. magento “Model collection resource name is not defined” 错误
  10. Storm概念学习系列之storm的雪崩