【天梯赛】L2-003 月饼 (25 point(s))*

穿越隧道

求每种月饼的每顿价格,对其进行排序。
注意需要double型的数组不论吨数还是售价

#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 10;
double k[N];
int n,d;
double ty[N];//double 
double sale[N];//double数组决定了第三个样例 
struct node{
    double k;
    int idx;//元素种类所对应的下标
}kk[N];
bool cmp(node a, node b){
    return a.k >= b.k;
}
int main(){
    cin >> n >> d;
    for(int i = 0; i < n; i++){
        cin >> ty[i];
    }
    for(int i = 0; i < n; i++){
        cin >> sale[i];
    }
    for(int i = 0; i < n; i++){
        kk[i].k = sale[i]*1.0/ty[i];
        kk[i].idx = i;
    }
    sort(kk,kk + n,cmp);
//    for(int i = 0; i < n; i++){
//    	cout << kk[i].k <<" " ;
//    	cout << kk[i].idx <<endl;
//	}
//	cout <<endl<<"----" << endl;
    double ans = 0;
    for(int i = 0; i < n; i++){
        if(ty[kk[i].idx] > d){
            ans += (d*1.0/ty[kk[i].idx]) * sale[kk[i].idx];
            break;
        }
        else{
            ans += sale[kk[i].idx];
            d -= ty[kk[i].idx];
//            cout <<"d = " << d << endl;
        }
    }
    printf("%.2f",ans);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个非常复杂的方程组,求解需要使用数值方法。 可以使用 MATLAB 中的“fsolve()”函数进行求解。具体步骤如下: 1. 将方程组转化为形如 F(x) = 0 的形式,其中 x 是未知量向量,F(x) 是一个向量函数,包含所有方程的左侧减去右侧。 2. 定义一个匿名函数,输入参数为 x,返回值为 F(x)。 3. 调用“fsolve()”函数求解。将匿名函数和一个初始解向量作为输入参数,可以设置其它可选参数以控制求解过程。 下面是 MATLAB 代码实现: ``` % 定义匿名函数 F = @(x) [ 3*g*(-2*x(1)-4*(x(2)+x(3)))/(-2*(4*x(1)+3*(x(2)+4*x(3)))*x(4)) + 2.8881; -9*g*x(3)/(-2*(4*x(1)+3*(x(2)+4*x(3)))*x(4)) - 2.8880; 2*g*x(2)*(x(1)+2*(x(2)+x(3)))*x(4)^2*x(5)/(4*x(2)^2*x(4)^2*x(5)^2-16/9*x(2)*(x(1)+3*(x(2)+x(3)))*x(4)^2*x(5)^2) - 0.4689; -4*g*x(2)*(x(1)+3*(x(2)+x(3)))*x(4)^2*x(5)/(4*x(2)^2*x(4)^2*x(5)^2-16/9*x(2)*(x(1)+3*(x(2)+x(3)))*x(4)^2*x(5)^2) + 0.3099; 3*(-2*x(1)-x(1)-4*x(3))/(-2*(4*x(1)+3*(2*x(2)+4*x(3)))*x(4)) - 0.6953; (2*x(2)*(x(1)+2*(x(2)+x(3)))*x(4)^2*x(5)-4/3*x(2)*(x(1)+3*(x(2)+x(3)))*x(4)^2*x(5))/(4*x(2)^2*x(4)^2*x(5)^2-16/9*x(2)*(x(1)+3*(x(2)+x(3)))*x(4)^2*x(5)^2) - 0.1953 ]; % 设置初始解向量 x0 = [1; 1; 1; 1; 1]; % 调用 fsolve 函数求解 options = optimoptions('fsolve','Display','iter'); [x,~,exitflag] = fsolve(F, x0, options); % 输出结果 if exitflag > 0 fprintf('m1 = %.4f\nm2 = %.4f\nm3 = %.4f\nl1 = %.4f\nl2 = %.4f\n', x(1), x(2), x(3), x(4), x(5)); else fprintf('求解失败!\n'); end ``` 运行代码后,应该可以得到方程组的一个数值解。需要注意的是,由于这是一个非线性方程组,可能存在多个根,因此得到的解可能不是唯一的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值