/*  贪心算法
问题:M磅猫粮,N个房间,第i个房间放着J[i]的老鼠粮食,需要F[i]磅猫粮给猫来看守,如果给予猫粮:F[i]*a%,则可获得J[i]*a%的老鼠粮食
输入:
第一行:非负整数 M N,接下来又N行,每一行含有1个非负整数 J[i] F[i]
最后一组测试用例为:-1 -1
所有的整数 <= 1000
对每一行输出:
打印出单独的一行,一个经过计算的实数(保留3位小数),老鼠能获得的最大的粮食(应选择最不值钱的鼠粮食)输入:
5(磅猫粮) 3(3行)
7 2
4 3
5 220(磅猫粮) 3(3行)
25(J[1],第1个房间放着25磅老鼠粮食) 18(需要给猫18磅猫粮)  18/25=0.72
24 15                                                     15/24=5/8=0.625(先买它)   15*(24/15)=24
15 10                                                     10/15=2/3=0.66  (再买它)5*(15/10)=7.5  综合31.5
-1 -1(结束)
输出:
13.333
31.500思路:最贪心思路,选择最不值钱的,能买到的鼠粮最多->鼠粮/猫粮最大的,通过 18元能买25斤食物,所以1斤需要18/25,后除以前,最大的即为价值最高的,1元能买25/18(越大越不值钱)
1元能买 24/15=1.6斤,选择前/后最大的先买关键:
1 打印3位小数 printf("%.3d",x);
2 整型数做除法要乘以1.0,否则为整数,(1.0)*iMouseFood/iCatFood
3 要设定猫粮减为空时,要跳出循环,当前猫粮不够这个房间时,同时要设置猫粮使用完后为空
*/#include <stdio.h>
#include <stdlib.h>
#include <memory.h>typedef struct Food
{bool operator < (const Food& food){return iValue < food.iValue;}int iMouseFood;int iCatFood;double iValue;
}Food;int partition(Food *A,int low,int high)
{Food iPos = A[low];while(low < high){while(low < high && iPos < A[high]){high--;}A[low] = A[high];while(low < high && A[low] < iPos){low++;}A[high] = A[low];}A[low] = iPos;return low;
}void quickSort(Food *A,int low,int high)
{if(low < high){int iPos = partition(A,low,high);quickSort(A,low,iPos-1);quickSort(A,iPos+1,high);}
}int main(int argc,char* argv[])
{int iCatFood,iNum;double dResult[100];int iCount = 0;//用于存放计算后的结果//第三个元素是鼠粮/猫粮的值,值越大说明鼠粮越不值钱,能买到的鼠粮越多while(EOF!=scanf("%d %d",&iCatFood,&iNum)){if(-1==iCatFood && -1==iNum) //第三次输入这个就无法判断了?{break;}int i;//int iArr[100][3];//建立二维数组,共有100行,每行3个元素,第一个元素是鼠粮,第二个元素是猫粮,Food food[100];for(i = 0;i < iNum ; i++){scanf("%d %d",&food[i].iMouseFood,&food[i].iCatFood);if(food[i].iMouseFood < 0  || food[i].iCatFood < 0)//校验输入数据的合法性{return -1;}else{food[i].iValue = 1.0*food[i].iMouseFood/food[i].iCatFood;//易错}}//对鼠粮/猫粮的值其进行快速排序,注意易错quickSort(food,0,iNum-1);//判断当前房间需要的猫粮是否足够,计算结果double dRes = 0.0;//从后向前读,因为先找iValue大的//for(i = 0; i < iNum ; i++)for(i = iNum - 1; i >= 0 ;i--){//设定推出循环的条件为,猫粮为空if(iCatFood <= 0){break;}//如果当前猫粮没有超过该房间最大值if(iCatFood < food[i].iCatFood ){//dRes += iCatFood*(food[i].iMouseFood/food[i].iCatFood);//注意保证浮点数,要乘以1.0dRes += 1.0*iCatFood*(1.0*food[i].iMouseFood/food[i].iCatFood);//易错,这里用两个整型数做除法要乘以1.0//易错,忘记置iCatFood为0了iCatFood = 0;}//如果当前猫粮超过该房间最大值else{dRes += 1.0*food[i].iMouseFood;iCatFood -= food[i].iCatFood;}}//存放结果到数组中dResult[iCount++] = dRes;   }//iCount--;for(int i = 0 ;i < iCount;i++){printf("%.3f\n",dResult[i]);}system("pause");getchar();return 0;
}

机试算法讲解: 第11题 贪心之猫鼠大战相关推荐

  1. 机试算法讲解:第26题 分解素因数

    /* 问题:质因数个数.求正整数N(>1)的质因数的个数.相同的质因数需要重复计算.如120=2*2*2*3*5,共有5个质因数. 输入:多组测试数据,每组测试数据的输入时一个正整数N,(1&l ...

  2. 机试算法讲解: 第10题 让我们来查询学生的信息

    /* 问题:输入N个学生的信息,进行查询 输入: 4 01 李江 男 21 02 刘唐 男 23 03 张军 男 19 04 王娜 女 19 5 02 03 01 04 03 输出: 02 刘唐 男 ...

  3. Java算法:华为机试算法(下),华为算法Java版,牛客网华为算法73~108题

    接上篇:Java算法:华为机试算法(中),华为算法Java版,牛客网华为算法55~72题   HJ73 计算日期到天数转换 计算日期到天数转换 题目描述 根据输入的日期,计算是这一年的第几天.. 测试 ...

  4. 2023华为OD机试备考攻略 以及题库目录分值说明 考点说明

    刷题库,刷题库 刷题库.重要的事情说三遍!!!!!!!!!!!!!!!!!!!!!! 要刷有多种语言的实现的题库,一种语言看不懂可以换另一种语言,而且可以结合起来去重!!! 类似下面这种的题库: 华为 ...

  5. 华为OD机试(21-40)老题库解析Java源码系列连载ing

    华为OD机试算法题新老题库练习及源码 老题库 21.字符串序列判定 22.最长的指定瑕疵度的元音子串 23.处理器问题 24.单向链表中间节点 25.字符串重新排列.字符串重新排序 26.完美走位 2 ...

  6. 华为OD机试(Java)真题目录汇总(20222023)

    1.其它语言华为OD机试真题目录 华为OD机试(Python)真题目录汇总 华为OD机试(C++)真题目录汇总 华为OD机试(JavaScript)真题目录汇总 2.Java语言实现华为OD机试目录 ...

  7. 华为OD机试(Python)真题目录汇总(20222023)

    1.其它语言华为OD机试真题目录 华为OD机试(JAVA)真题目录汇总 华为OD机试(C++)真题目录汇总 华为OD机试(JavaScript)真题目录汇总 2.Python语言实现华为OD机试目录 ...

  8. 关于华为机试会不会考原题Od的问题?

    实证一下华为机试可能会考到原题吧. 都是扒的2022年下半年的牛客上的面经记录,里面有机试题的分享. 牛客网讨论区2022下半年的帖子,基本上是实锤的. 注意:牛客网上的是练习题,和考试真题是不一样的 ...

  9. 某厂机试算法刷题一览

    牛客网-华为笔试面试机考在线练习 力扣刷题 All posts in 德科机试一星题 A机试叮当猫-华为机试真题 GavenHwang的博客-华为机试 coder 明轩博客-华为机试23题总结 目录 ...

最新文章

  1. 华为机考HJ17坐标移动
  2. 收购创业公司如何评估价值
  3. php 警告提示框,关于javascript:php重定向到带有警告对话框的页面
  4. php中如何让这段东西不显示出来,数据显示处理,该怎么处理
  5. 实现一个MVVM和promise
  6. Hystrix面试 - 深入 Hystrix 断路器执行原理
  7. CentOS7下安装配置Tomcat环境
  8. 分享一个检测用户是否用手机(Mobile)访问网站的 PHP 类
  9. (1)快速了解Redis
  10. 欧姆龙PLC 通过CJ1W-EIP21实现在线编程
  11. 李宏毅机器学习-- RNN
  12. 曲奇云盘资源搜索引擎_曲奇云盘下载-曲奇云盘资源共享群组下载_快啦网
  13. linux 中cat用法
  14. html书签制作方法图片大全,简单纸书签的折法 纸书签制作方法步骤图
  15. 7年阿里Java人教你:秒杀活动就应该这样玩?
  16. 想象力无限,人工智能时代你对AGV有什么期许
  17. python使用scrapy爬取图片
  18. 知名界面类控件Kendo UI for jQuery R2 2019 SP1发布|附下载
  19. vue列表的单独展开收起和全部展开收起
  20. 读《计算机科学概论》

热门文章

  1. Untiy3D笔记之番外篇——c# 生成真正随机数
  2. 快速说唱教学第一期: flow是啥?学会基本的就完事了?
  3. 笔记本c盘满了怎么清理呢?笔记本c盘清理会误删吗?
  4. 马走日 DFS c++ 算法解答
  5. excel百万数据处理,内存溢出问题,Java常见溢出问题解决
  6. 身份证号码合法性判断
  7. 25部禁片你看过几部
  8. rgb sw 线主板接口在哪_RGB实用兼具:火鸟 黎明至尊 ARGB机箱 上机体验
  9. Nexus SSR激活
  10. 网络协议划分、各协议位于哪一层、三次握手四次挥手