最多买多少只龙虾
来源:互联网 发布:泉州会计网络继续教育 编辑:程序博客网 时间:2024/04/28 05:32
题目描述:
说小明的妈妈给了小明一定钱数,希望他尽可能多地买龙虾。小明做了市场调查,将市场上的小龙虾单价和总数放在一个名叫做data_type的数据结构中,你能帮帮小明计算出这笔钱能最多买多少只龙虾吗?
定义一个float getAns(int money, vector &Data)函数,返回值为龙虾个数,结果保留两位小数。其中Data数组为小明做的市场调查结果。注意:若要对Data数据进行排序,不能使用STL的sort()函数。
# include <iostream># include <vector>using namespace std;typedef struct Data { int price; int num;} data_type;float getAns( int money, vector<data_type> &Data);void sortData(vector<data_type> &Data);void printData(vector<data_type> &Data);void createStore(vector<data_type> &Data){ data_type stores[10] = { {2, 9}, {3, 8}, {2, 7}, {3, 10}, {1, 3}, {0, 2}, {18, 1}, {3, 3}, {8, 9}, {3, 10} }; for (int i = 0; i < 10; ++i) { Data.push_back(stores[i]); }}void sortData(vector<data_type> &Data){ if (Data.size() <= 0) return; for (unsigned int i = 0; i < Data.size() - 1; ++i) { for (unsigned int j = 0; j < Data.size() - i - 1; ++j) { if (Data[j].price > Data[j + 1].price) { swap(Data[j], Data[j+1]); } } }}void printData(vector<data_type> &Data){ for (unsigned int i = 0; i < Data.size(); ++i) { cout << Data[i].price << ", " << Data[i].num << endl; }}float getAns( int money, vector<data_type> &Data){ if (money <= 0|| Data.size() <= 0) return 0.0; sortData(Data); int totalMoney = 0; int leftMoney = 0; int finalMoney = 0; int cnt = 0; float finalNum = 0.0; for (unsigned int i = 0; i < Data.size(); ++i) { if (totalMoney < money) { for (unsigned int j = 0; j < Data[i].num; ++j) { totalMoney += Data[i].price; finalMoney = Data[i].price; cnt ++; if (totalMoney >= money) break; } if (totalMoney >= money) break; } if (totalMoney >= money) break; } if (totalMoney > money) { cnt --; totalMoney = totalMoney - finalMoney; leftMoney = money - totalMoney; int temp; temp = (int) (leftMoney * 100 * (1.0) / finalMoney); finalNum = temp/100.0 + cnt; return finalNum; } else { return cnt; }}int main(void){ vector<data_type> Data; createStore(Data); cout << "ans is: " << getAns(42, Data) << endl; return 0;}
做法是先将Data数据按单价从低到高排序,从低到高取小龙虾,每取一个,记录总价格之和,若总价之和大于给予的钱数,退出循环,然后算剩余的钱数还能买零点几只龙虾,最后龙虾个数加上这个小数就是总龙虾个数。
取小数点后两位的做法是:先将小数扩大100倍后取整数,再将这个整数除以100.0即保留了两位小数。
此测试程序运行后的结果为:
0 0
- 最多买多少只龙虾
- 若用100元买100只鸡,则公鸡、母鸡和小鸡各能买多少只。
- 贪心买最多东西
- 【经典】有K张折扣券和m元最多能买多少物品(折前价ai,折后价bi)
- 卖龙虾丢钱包急哭老太 民警:别急 我都买了
- 关于买鸡的问题,5文钱可以买一只公鸡,3文钱可以买一只母鸡,1文钱可以买3只雏鸡.现在用100文钱买100只鸡,那么各有公鸡、母鸡、雏鸡多少只?
- 尺子最多覆盖多少点
- Trafodion 最多支持多少表
- 鸡翁每只5元、鸡母每只3元、鸡雏每3只1元,编程计算若用100元买100只鸡,则鸡翁、鸡母、鸡雏各能买多少只
- 2元可以买一瓶啤酒,4个瓶盖可以换一瓶,2个空瓶可以换一瓶,,10元最多可以喝多少瓶
- 给20块钱买可乐,每瓶可乐3块钱,喝完之后退瓶子可以换回1块钱,问最多可以喝到多少瓶可乐。
- 你买了多少ERP?
- 多少只动物
- 一百个铜钱买了一百只鸡,其中公鸡一只5钱、母鸡一只3钱,小鸡一钱3只,问一百只鸡中公鸡、母鸡、小鸡各多少。
- 用break/continue语句 百钱百鸡。公鸡5元一只,母鸡3元一只,小鸡1元3只。求100元分别能买多少公鸡、母鸡、小鸡。
- 用goto语句 百钱百鸡。公鸡5元一只,母鸡3元一只,小鸡1元3只。求100元分别能买多少公鸡、母鸡、小鸡。
- MySQL最多能装多少记录
- SQL Server 最多可存多少列!
- 漫步微积分三十七——力和功
- android:windowActionBar报错问题
- Gym 100685G
- HBase 列族数据库
- 飞机游戏
- 最多买多少只龙虾
- RasGetEntryProperties
- JdbcTemplate
- 树莓派搭建DLNA客户端,使用gmediarender,DLAN render。
- 单链表逆转
- Vim高频使用技巧
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Action类为何要 extends ActionSupport
- php脚本守护进程设计