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. 两个结果比较,合理吗?
不合理