数学建模四 公平席位分配的比例+惯例法和Q值法

#include<iostream>
#include<cmath>
#define N 50
using namespace std;
int main()                                                 //比例+惯例法
{
	int n[N], p[N], nsum, sum1, sum, m, i, j, k,  r;
	float c[N];
	sum = 0;sum1 = 0;j = 0;
	cout << "please enter m n" << endl;
	cin >> m >> nsum;
	cout << "please enter pi " << endl;
	for (i = 0;i < m;i++)cin >> p[i];
	for (i = 0;i < m;i++)sum = sum + p[i];
	for (i = 0;i < m;i++) n[i] = floor(((float)p[i] / sum)*nsum);
	for (i = 0;i < m;i++)sum1 = sum1 + n[i];
	k = nsum - sum1;
	for (i = 0;i < m;i++)c[i] = ((float)p[i] / sum)*nsum - n[i];
	for (r = 0;r < k;r++)
		for (i = 0;i < m;i++)
			if (c[i] > c[j])j = i;
		n[j]++;
		c[j] = 0;
	for (i = 0;i < m;i++)cout << n[i]
  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
公平席位分配惯例(Fair Seat Allocation Tradition,简称FSAT)是一种用于解决席位分配问题的算,可以用来公平分配固定数量的席位给多个参与者。以下是一个使用MATLAB实现FSAT算的示例代码: ```matlab % 输入参数:num_seats表示席位数量,num_participants表示参与者数量 % 返回值:seat_allocation表示每个参与者分配到的席位号 function seat_allocation = fsat(num_seats, num_participants) % 初始化每个参与者的优先级矩阵 priority_matrix = zeros(num_participants, num_seats); for i = 1:num_participants for j = 1:num_seats priority_matrix(i,j) = rand(); % 随机生成优先级 end end % 对每个参与者的优先级矩阵进行排序 for i = 1:num_participants [~, idx] = sort(priority_matrix(i,:), 'descend'); priority_matrix(i,:) = idx; end % 分配席位 seat_allocation = zeros(1, num_participants); for i = 1:num_seats for j = 1:num_participants if seat_allocation(j) == 0 && ~isempty(find(priority_matrix(j,:) == i, 1)) seat_allocation(j) = i; break; end end end end ``` 该函数首先生成一个随机的优先级矩阵,然后对每个参与者的优先级矩阵进行排序。接下来,它按顺序分配席位,对于每个席位,依次遍历参与者,如果该参与者在当前席位的优先级矩阵中排名第一并且尚未分配席位,则将该席位分配给该参与者。 需要注意的是,由于该算涉及随机数生成,因此每次运行的结果可能会不同。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值