公平的席位分配(参照惯例的席位分配方法)

        n 为席位总数,p1,p2,…,pm 为各单位人数。

        步骤:

         a. 按比例各单位所得席位为 n*pi/(p1+p2+,…,pm),i=1,2,…,m(结果可能含有小 数)。

        b. 对各单位所得席位取整。

        c. 若对各单位所得席位取整数之和<0,说明席位未分完。将(1)中各数的小数部分按 从大到小排序,把剩余的席位顺序分出去(每个单位至多分 1 个席位)。

         某学校有甲乙丙三个系共有 200 名学生,其中甲系有 103 人,乙系有 63 人,丙系有 34 人。

        1. 有 20 个代表席位,采用参照惯例的席位分配方法,分别求出甲乙丙系的“席位分 配结果”和“求解过程”。

         2. 有 21 个代表席位,采用参照惯例的席位分配方法,分别求出甲乙丙系的“席位分 配结果”和“求解过程”。

         下面是参照惯例的席位分配方法的求解函数:

%输入:p为各单位人数(行向量),n为总席位(标量)
%输出:ni为各单位所得席位,c为求解过程(矩阵)
%文件名:fapt1.m
function [ni,c]=fapt1(p,n)
temp=p*n/sum(p); %按比例各单位所得席位(可能含小数)
ni=fix(temp); %各单位所得席位取整
c=ni;
if sum(ni)<n %席位没分完,temp中存在小数部分不为0
    c=[temp;ni]; %拼接
    temp=temp-ni; %取小数部分
    [d,k]=sort(temp,'descend');%按降序排序(缺省为升序)
    i=1;
    while sum(ni)<n
        ni(k(i))=ni(k(i))+1;
        i=i+1;
    end
    c=[c;ni]; %拼接
end

1. 在命令窗口分别调用以上函数求解(使用最佳定点或浮点格式(5 位数字)控制 命令 format short g)。

2. 两个结果比较,合理吗?

 

不合理

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值