昨天朋友给了我这样一个需求,要我帮她想想办法!我不知道这是否是关于算法,实现了,她说效果就是那样的!也许这个实现并不难,但我还是共享出来,让大家一起讨论一下吧!
 
 
问题如下:
现需要从数据库的专家表中抽取若干位专家(每一位专家都有一个行业属性),现在页面上已经有两个选项,一个是行业多选框,可以选择一个或多个行业,另外一个是文本框,填入需要抽取的专家个数。
请根据以上两个条件抽取专家,同时需要达到的要求是:
(1) 随机抽取,即每次抽取的专家不同
(2) 按行业多选框选中的行业,专家数近似平均分布,如选中3个专业,抽取10人,则专家数分布应为4、3、3或者3、4、3或者3、3、4。
 
 
我的代码:
 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'tanming.jsp' starting page</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>
  
  <body>
  <table>
      <tr>
    <td>请选择行业个数:</td>
    <td>
        <select multiple="multiple" id="select" name="select">
          <option value="计算机软件">计算机软件</option>
          <option value="计算机硬件">计算机硬件</option>
          <option value="互联网/电子商务">互联网/电子商务</option>
          <option value="通信/电信运营、增值服务">通信/电信运营、增值服务</option>
          <option value="网络游戏">网络游戏</option>
          <option value="通信/电信/网络设备">通信/电信/网络设备</option>
          <option value="计算机服务(系统、数据服务,维修)">计算机服务(系统、数据服务,维修)</option>
          <option value="电子技术/半导体/集成电路">电子技术/半导体/集成电路</option>
      </select>
    </td>
      </tr>
      <tr>
    <td></td>
    <td></td>
      </tr>
      <tr>
    <td></td>
    <td></td>
      </tr>
      <tr>
    <td>请输入专家个数:</td>
    <td><input type="text" id="text"/></td>
      </tr>
    
  </table>
    
    
    
    <input type="button" value="分布专家" onclick="btnOnClick();"/>
    <div id="div1">
      
    </div>
  </body>
  <script type="text/javascript">
    
      function btnOnClick(){
    var inumber = 0;//行业个数
    var enumber = 0;//专家个数
    var gnumber = 0;//分组个数
    var iarray = new Array();//行业数组
    var selectobj = document.getElementById("select");
    var textobj = document.getElementById("text");
    var enumber = textobj.value;
    var selectlength = selectobj.length;
    for(var i=0;i<selectlength;i++){
        if(selectobj[i].selected){
      inumber++;
      iarray.push(selectobj[i].value);
        }
    }
    if(inumber==0){
        alert("请选择行业!");
        return;
    }
    if(enumber==""){
        alert("请输入专家个数!");
        textobj.focus();
        return;
    }
    var yushu = enumber%inumber;//余数
    var chushu = parseInt(enumber/inumber);//除数
    gnumber = inumber;
    var lastnumber = enumber-(gnumber-1)*chushu;//最后那一组的专家个数
    var garray = new Array();//整个专家分布个数的数组
    for(var j=0;j<gnumber;j++){
        var array = new Array();
        for(var k=0;k<inumber;k++){
      if(j==k){
          array.push(lastnumber+"个"+iarray[k]);
      }else{
          array.push(chushu+"个"+iarray[k]);
      }
        }
        garray.push(array);
    }
    var str = "";
    var divobj = document.getElementById("div1");
    for(var m=0;m<garray.length;m++){
        str+="分布方案"+parseInt(m+1)+":";
        for(var n=0;n<garray[m].length;n++){
      str+=garray[m][n];
      str+="、    ";
        }
        str+="<br><br>";
    }
    divobj.innerHTML=str;
      }
  </script>
</html>
 
感谢您的支持,我会更加努力!