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

就用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);
        }
    }
 }

《离散数学之把妹要诀》的js实现的更多相关文章

  1. input required字段;django input输入框不填写会自动变红如何修改

    前端页面中,input不输入任何内容时,点击submit时,未填写的input会标红框,有些人还会有"该字段必填的字样"!! 什么鬼,你妹的,js也见不到,css3动画也见不到,怎 ...

  2. 通用js函数集锦<来源于网络> 【二】

    通用js函数集锦<来源于网络> [二] 1.数组方法集2.cookie方法集3.url方法集4.正则表达式方法集5.字符串方法集6.加密方法集7.日期方法集8.浏览器检测方法集9.json ...

  3. 网络问卷调查js实现代码

    昨天一个同行妹纸写了一个网络问卷调查的效果,但是有bug,于是就来问我该如何解决这个bug.经过我的分析,bug主要还是出在复选框的那部分,经过修改,bug问题解决,现在贴出如下代码,仅供大家参考: ...

  4. 全国城市三级联动 html+js

    全国城市三级联动,没有css,所以屏幕的自适应必须自己想办法,手机端慎用(最好不要用,因为有些我也说不出的展示问题). html页面 <!DOCTYPE html> <html> ...

  5. js表单提交,面向对象

    一.js表单验证之后再提交 1.普通按钮onclick函数调用表单的submit()函数 <input type=button name="submit1" value=&q ...

  6. QQ JS省市区三级联动

    如下图: 首先写一个静态的页面: <!DOCTYPE html> <html> <head> <title>QQ JS省市区三级联动</title ...

  7. JS中定义类的方法

    JS中定义类的方式有很多种: 1.工厂方式    function Car(){     var ocar = new Object;     ocar.color = "blue" ...

  8. Python之路,Day18 - 开发一个WEB聊天来撩妹吧

    Python之路,Day18 - 开发一个WEB聊天来撩妹吧   本节内容: 项目实战:开发一个WEB聊天室 功能需求: 用户可以与好友一对一聊天 可以搜索.添加某人为好友 用户可以搜索和添加群 每个 ...

  9. js 全国城市3级联动

    js /* * 全国三级城市联动 js版 */ function Dsy(){ this.Items = {}; } Dsy.prototype.add = function(id,iArray){ ...

随机推荐

  1. < meta > 元素(转)

    < meta > 元素 概要 标签提供关于HTML文档的元数据.元数据不会显示在页面上,但是对于机器是可读的.它可用于浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其他 we ...

  2. 添加“返回顶部”小图标按钮的JS(JavaScript)代码详解

    如何给自己的网站添加方便快捷的"返回顶部"小图标按钮呢?如下图: JS源代码: /** * JavaScript脚本实现回到页面顶部示例 * @param acceleration ...

  3. 安装oneproxy实现数据库的读写分离

    领导就给了两台数据库,做主从,在从上搭建oneproxy插件,实现读写分离,一直就听说oneproxy,今天打算用一下 先下载最新的版本wget http://www.onexsoft.cn/soft ...

  4. VS 调试Window Server方法

    在需要调试的地方加 Debugger.Launch();然后在本机安装服务并启动即可进入

  5. BZOJ 3503: [Cqoi2014]和谐矩阵( 高斯消元 )

    偶数个相邻, 以n*m个点为变量, 建立异或方程组然后高斯消元... O((n*m)^3)复杂度看起来好像有点大...但是压一下位的话就是O((n*m)^3 / 64), 常数小, 实际也跑得很快. ...

  6. PHP的五种常见设计模式

    工厂模式 最初在设计模式 一书中,许多设计模式都鼓励使用松散耦合.要理解这个概念,让我们最好谈一下许多开发人员从事大型系统的艰苦历程.在更改一个代码片段时,就会发生问题,系统其他部分 —— 您曾认为完 ...

  7. 用document.title=“xxx”动态修改title,在ios的微信下面不生效的解决办法!

    //需要jQuery var $body = $('body'); document.title = 'title'; // hack在微信等webview中无法修改document.title的情况 ...

  8. sublime less高亮插件

    1.安装git bash 2.进入到sublime 的package目录下(Preference =>Browse packages) 3.运行gitbash,输入 git clone http ...

  9. Android Studio “Project Structure”选项目录结构显示异常

    在Android Studio中,可以在左上角切换项目的目录结构,project,android,等,一般切换project选项,会显示工程目录,但是,有时候就突然没有对应工程目录了.如下: 其实,看 ...

  10. mysql性能优化学习笔记(4)索引的优化

    一.选择合适的索引列     1.在where,group by,order by,on从句中出现的列     2.索引字段越小越好(因为数据库的存储单位是页,一页中能存下的数据越多越好 )      ...