【矿大】中国矿业大学 CUMT 信息安全管理与工程2024春季学期 OpenJudge OJ 问题 A: 综合分析法和功效分析法

题目

题目截图如下

解释的不明不白,很容易让人无法理解公式的意义

题目解释 

重新解释一下这道题目

第一个公式中X+j和X-j分别表示同一个属性类中最大的和最小的

例如第一类属性的值分别为12000 8500 13000 11000,最大值和最小值就分别为13000和8500

第二个公式由于使用了排序,同类属性中第n个其实就是最大值,而同类属性中第1个就是最小值,出题人故意使用多种混淆符号,属实是水平太臭。

代码

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
	///指标数量
	int n;
	cin >> n;

	///指标权重
	vector<double> w;
	for (int i = 0; i < n; i++)
	{
		double tem;
		cin >> tem;
		w.push_back(tem);
	}

	///企业数量
	int m;
	cin >> m;

	//企业所有指标
	vector<vector<double>> count;
	for (int i = 0; i < m; i++)
	{
		vector<double> tem1;
		for (int j = 0; j < n; j++)
		{
			double tem2;
			cin >> tem2;
			tem1.push_back(tem2);
		}
		count.push_back(tem1);
	}

	//预处理
	vector<double> difference;
	vector<double> min_num;
	vector<double> max_num;
	for (int i = 0; i < n; i++)
	{
		vector<double> tem1;
		for (int j = 0; j < m; j++)
		{
			tem1.push_back(count.at(j).at(i));
		}
		sort(tem1.begin(), tem1.end());
		difference.push_back(tem1.at(m - 1) - tem1.at(0));
		min_num.push_back(tem1.at(0));
		max_num.push_back(tem1.at(m - 1));
	}

	//综合计算
	for (int i = 0; i < m; i++)
	{
		vector<double> num = count.at(i);
		double sum1 = 0;
		double sum2 = 0;
		for (int j = 0; j < n; j++)
		{
			double tem = 0;
			if (num.at(j) > 0)
			{
				tem = num.at(j) / max_num.at(j);
			}
			else
			{
				tem = num.at(j) / min_num.at(j);
			}
			sum1 += w.at(j) * 100 * tem;
			sum2 += w.at(j) * ((num.at(j) - min_num.at(j)) / difference.at(j));
		}
		printf_s("%.3f %.3f\n", sum1, sum2);
	}
	return 0;
}

不多赘述,题目没什么难度,不过出题人故意把题目出的很难看

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值