c++题目:最小花费

题目描述

乐乐做好了一二三等奖奖品费用预算方案之后,决定到市场上具体咨询一下三种奖品的具体价格,发现各个商家的报价还是有差别的,乐乐决定哪家所有奖品总金额最少就在哪家购买,假设每家货源是充足的。乐乐咨询了n个店家,几乎跑遍了整个市场,才得到各个商家的最低报价清单。现在请你计算出乐乐会在哪家商家购买奖品以及费用是多少。

输入

共 n+1 行 

第一行,有四个整数 n,x,y,z,数与数之间用一个空格隔开,n 表示乐乐咨询的商家数,x,y,z 分别表示要购买一等奖奖品数量、二等奖奖品数量、三等奖奖品数量。 

接下来的 n 行,每行都有三个数,数与数之间用一个空格隔开,第 i+1 行分别表示编号为 i 的商家对一、二、三等奖奖品的报价(单价) 

输出

共有两个整数,第一个数表示购买奖品的商家编号(如果有多家总费用最少,输出编号最小的商家),第二个数是购买奖品的总费用。 

样例输入 Copy

3 1 2 3
70 50 30
60 40 20
80 55 33

样例输出 Copy

2 200

提示

【样例解释】

乐乐咨询了 3 个商家,打算购买一二三等奖奖品数量分别是 1 个、2 个、3 个,编号为 1 的商家一二三等奖奖品报价分别是 70、50、30 元,编号为 2 的商家报价分别是 60、40、20 元,编号为 3 的商家报价分别是 80、55、20 元,乐乐在编号为 2 的商家购买总费用最低,为200 元。

【数据范围】

40%数据:1≤n≤5000 

100%数据:1≤n≤100000,1≤x,y,z≤1000,奖品报价都是 1000 范围以内的正整数。

#include <iostream>
#include <stdio.h>
using namespace std;

int main(){
    int n,x,y,z,i,min=1000000,n1,n2,n3,temp,t=0;
    cin>>n>>x>>y>>z;
    for(i=0;i<n;i++){
        temp=0;
        cin>>n1>>n2>>n3;
        temp+=n1*x+n2*y+n3*z;
        if(temp<min){
            min=temp;
            t=i+1;
        }
    }
    cout<<t<<" "<<min;
    return 0;
}

void main()
{
	printf("请输入商家数量及一二三等奖数量,用空格分隔:");
	int i,n,x,y,z,m=0,min=0,one,two,three;
	scanf("%d %d %d %d",&n,&x,&y,&z);
	for(i=0; i <n; i++)
	{
		printf("请输入第%d个商家一二三等奖的价格,用空格分隔:",i+1);
		scanf("%d %d %d",&one,&two,&three);
		if(i==0)
			min = one*x+two*y+three*z;
		else if(min > one*x+two*y+three*z)
		{
			min = one*x+two*y+three*z;
			m = i;
		}
	}
	//
	printf("最便宜的商家是第%d个,总价格为:%d",m+1,min);
}