解决方案 »

  1.   


    新手来试试写写主要思路...首先知道权重大小后,将同样大的放一组,标号(权重多少就多少。例如权重3,有4个,则T[3][0]=,T[3][1]=....etc)
    如例子:则
    private int s=5;
    private int weight1=2,weight4=2,weight2=3,weight3=3;
    private int Q[]={weight1,weight2,weight3,weight4};
    private int T[][];
    private int getWeight(int Q[]){
        int weight=0;
        for(i=0;i<Q.length;i++){
            while(true){
                int j=0;
                if(T[Q[i]][j]==null){
                    T[Q[i]][j]=i;
                    break;
                }else{
                    j++;
                }
                weight+=Q[i];
            }
        }
        return weight;
    }
    如此,题目号被对应的权重记录下来,并返回总权重
    然后知道分值总数,得到总权重,然后用分值总分/总权重,向下取整。
    private int averageWeight(int weight){
        return s/weight;
    }然后if(T[][]!=null),则[T[][]]=averageWeight(getWeight(Q[]);。
    就不写了 ....
      

  2.   

    设总数为T
    将权重值求和如2:3:3:2=>2+3+3+2=10 设为A
    将权重从大到小排序2:3:3:2=>3,3,2,2
    对于每一个元素,求从头到本元素的和3,3,2,2 =>3,6,8,10  设为S[n]
    则有每一个元素能分到的值x[i]=(T*S[n]/A)-x[1]-x[2]-...-x[i-1] 后求整数