以C ++的数量K最大化可以购买的玩具数量
我们得到的玩具价格为数组形式,手中的数量为K。目标是购买最大数量。数量的玩具。数组中的每个元素都是单个玩具的价格,所以没有。玩具不是。的元素。我们将按价格升序对价格进行排序,以便首先购买价格较低的最大玩具,然后再购买昂贵的玩具。
输入值
toyprices[]= { 10, 20, 12, 15, 50, 30 } K=50
输出结果
Maximum no. of toys that can be purchased : 3
说明-玩具价格按升序排序-{10,12,15,20,30,50}
Take first toy: K=50, count=1, leftover K =40 ( 50-10 ) Take second toy: K=40, count=2, leftover K =28 ( 40-12 ) Take third toy: K=28, count=13, leftover K =13 ( 28-15 ) Now K< price of next toy 20 so count=3
输入值
toyprices[]= { 50,40,30,20,10 } K=25
输出结果
Maximum no. of toys that can be purchased : 1
说明-25>10,20,但您只能将其中之一设为10+20=30。最大数量=1
以下程序中使用的方法如下
整数数组toyprice[]存储玩具的价格。
函数maxToys(intprice[],intN,intK)获取价格数组,其长度和金额
toycount用于存储编号。可以购买的玩具数量,最初为0。
花费的变量用于检查从K花费了多少钱。
使用sort(price,price+N)以升序对数组price[]进行排序。
从最小价格,价格[0]到最高价格开始遍历数组价格[]。
继续增加已花费玩具的价格,并检查是否<=K,如果是,则增加toycount。这意味着该玩具可以被拿走。更新支出=消费+价格[i]。
最后,toycount列出了可以购买的玩具数量。
示例
#include <bits/stdc++.h> using namespace std; int maxToys(int price[], int N, int K){ int toycount = 0; int spent = 0; //money spent upto K only //对价格进行排序,以使最低价格第一 sort(price, price + N); for (int i = 0; i < N; i++) { if (spent + price[i] <= K){ spent = spent + price[i]; toycount++; } else break; //as array is sorted } return toycount; } int main(){ int budget = 100; int toyprice[] = { 10, 120, 50, 11, 20, 100, 10, 90, 12, 15 }; int N = 10; cout <<"Maximum no. of toys that can be purchased : "<< maxToys(toyprice, N, budget) ; return 0; }
输出结果
Maximum no. of toys that can be purchased : 6