2021.11.15洛谷买铅笔——c语言

题目描述

P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物。她发现商店一共有 33种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同。为了公平起 见,P老师决定只买同一种包装的铅笔。

商店不允许将铅笔的包装拆开,因此P老师可能需要购买超过nn支铅笔才够给小朋 友们发礼物。

现在P老师想知道,在商店每种包装的数量都足够的情况下,要买够至少nn支铅笔最少需要花费多少钱。

输入格式

第一行包含一个正整数nn,表示需要的铅笔数量。

接下来三行,每行用22个正整数描述一种包装的铅笔:其中第11个整数表示这种 包装内铅笔的数量,第22个整数表示这种包装的价格。

保证所有的77个数都是不超过1000010000的正整数。

输出格式

11个整数,表示P老师最少需要花费的钱。

输入输出样例

输入 

57
2 2
50 30
30 27

输出 

54

输入 

9998
128 233
128 2333
128 666

输出 

18407

输入 

9999
101 1111
1 9999
1111 9999

输出 

89991

说明/提示

铅笔的三种包装分别是:

  • 22支装,价格为22;
  • 5050支装,价格为3030;
  • 3030支装,价格为2727。

P老师需要购买至少5757支铅笔。

如果她选择购买第一种包装,那么她需要购买2929份,共计2 \times 29 = 582×29=58支,需要花费的钱为2 \times 29 = 582×29=58。

实际上,P老师会选择购买第三种包装,这样需要买22份。虽然最后买到的铅笔数 量更多了,为30 \times 2 = 6030×2=60支,但花费却减少为27 \times 2 = 5427×2=54,比第一种少。

对于第二种包装,虽然每支铅笔的价格是最低的,但要够发必须买22份,实际的花费达到了 30 \times 2 = 6030×2=60,因此P老师也不会选择。

所以最后输出的答案是5454。

【数据范围】

保证所有的77个数都是不超过1000010000的正整数。

这道题我其实还是有些疑惑的我用的方法再洛谷上使用之后却没有拿到满分,提供给我的输出错误结果我计算之后却是正确的。(有点搞不懂洛谷的判定了)

上代码

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main() {
	int num, i = 0, min, a, b;
	int count[10] = {0};
	int pri[10] = { 0 };
		int pay[10] = {0};
	scanf("%d", &num);
	for (i = 0; i < 3; i++) {
		scanf("%d %d",&a,&b);
		count[i] = a;
		pri[i] = b;
	}
	for (i = 0; i < 3; i++) {
		if (num % count[i] == 0) {
			pay[i] = num / count[i] * pri[i];
		}
		else {
			pay[i] = (num / count[i] + 1) * pri[i];
		}
	}
	for (i = 0; i < 3; i++) {
		min = pay[0];
		if (min > pay[i]) {
			min = pay[i];
		}
	}
	printf("%d", min);
	return 0;

这里用num表示老师需求购买的数量

第一个for循环时将三个商店的出售方式和价格分别接受到两个数组里

第二个for循环表示支付的价格,这里用数组pay来接受,这里有个小坑。当一捆铅笔的数量不足以需求的数量时,需要向上取整。

第三个for循环用遍历数组的方式,找到数组中的最小值,然后打印出来

如果i有更好的解法可以评论区评论和私法给我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值