网上看到一篇有意思的文章《离散数学之把妹要诀》

就用JS写了上面所讲的配对方式:

首先设定变量

 //    男生理想列表
 var menPreference = {
    A: [1, 2, 3, 4, 5],
    B: [1, 3, 4, 2, 5],
    C: [3, 2, 1, 4, 5],
    D: [4, 5, 2, 3, 1],
    E: [5, 2, 1, 4, 3]
 };
  // 女生理想列表
  var womemPreference = {
    1: ['A', 'B', 'C', 'D', 'E'],
    2: ['B', 'D', 'A', 'E', 'C'],
    3: ['E', 'B', 'C', 'A', 'D'],
    4: ['B', 'D', 'E', 'A', 'C'],
    5: ['B', 'C', 'A', 'D', 'E']
 };

 //    最终配对
 var couples = {}

以递归的形式调用表白和配对方法:

 //    获取稳定配对
 var getStableCouple = function(){
    for(var i in menPreference){
        var the_one = menPreference[i].shift();
        console.info("男" + i + "表白女" + the_one);
        if(i == womemPreference[the_one][0]){
            couples[i] = the_one;
            console.info("男" + i + "成功牵手女" + the_one);
            //    在原有列表中删除
            removeCouple(the_one, i);
        }
    }
    var len = getAttrLen(couples);
    if(len < 5){
        getStableCouple();
    }else{
        console.info(couples);
    }
 };

其中在配对完成后要删除原有列表中的这对男女的数据,具体方法如下:

//    扩展数组方法
    Array.prototype.remove=function(dx){
      if(isNaN(dx)||dx>this.length){return false;}
      for(var i=0,n=0;i<this.length;i++)
      {
        if(this[i]!=this[dx])
        {
          this[n++]=this[i]
        }
      }
      this.length-=1
  }

 var removeCouple = function(x, y){
    delete womemPreference[x];
    delete menPreference[y];
    for(var i in womemPreference){
        var arr = womemPreference[i];
        for(var j=0; j<arr.length; j++){
            if(y == arr[j]) arr.remove(j);
        }
    }
    for(var i in menPreference){
        var arr = menPreference[i];
        for(var j=0; j<arr.length; j++){
            if(x == arr[j]) arr.remove(j);
        }
    }
 }

最新文章

  1. 常见web攻击以及防御
  2. [AlwaysOn Availability Groups]SQL Server错误日志(AG)
  3. 【自动化学习笔记】_环境搭建Selenium2+Eclipse+Java+TestNG_(一)
  4. 《与mysql零距离接触》视屏学习笔记
  5. Codevs2157 配对
  6. 在 MySQL 中查找含有目标字段的表
  7. 【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.1.CSS框架和其他功能
  8. Selenium1(RC)与Selenium2(WebDriver)的概念介绍
  9. [AngularJS] Test an Angular Component with $componentController
  10. 开发期间的GWT设置---加快编译速度
  11. MyWidget【简单自制控件】
  12. PHP与MySQL交互
  13. scrapy设置&quot;请求池&quot;
  14. Django REST Framework 最佳实践
  15. JVM内存结构--新生代及新生代里的两个Survivor区(下一轮S0与S1交换角色,如此循环往复)、常见调优参数
  16. Java将Excel解析为数组集合
  17. if 结构语句
  18. 网络编程socket之一
  19. SharePoint REST API - OData查询操作
  20. Ionic 使用karma进行单元测试

热门文章

  1. Parallel多线程
  2. RDLC报表系列(四) 矩阵
  3. Mac下Mysql启动异常[&quot;ERROR 2002 (HY000): Can&#39;t connect to local MySQL server through socket &#39;/tmp/mysql.sock&#39; (2)&quot;]
  4. pagination jquery最简单的分页【无刷新和刷新都通用】
  5. c#中的数据类型简介(数组)
  6. android 7.0带来的
  7. eclipse 使用maven 创建springmvc + mybatis
  8. JUnit报空指针错误,控制台不报任何错误
  9. vs2012 发布网站丢失文件
  10. struts2笔记12-声明式异常