“中兴捧月”杯校园赛事嘉年华程序设计大赛题01

数字化婚姻配对尝试:建立一个模型,来模拟推导社会男女择偶过程。

1、100个男方,顺序,轮流从0号到99号女方中挑选自己最满意的一 位,然后向她发出配对邀请。
2、接受邀请最多的女方开始行动,对这些邀请的男性中,选择最满意 的一位。
3、那么这两位配对成功,剔除出样本,剩下的99对继续这样配对。
4、循环该配对法则,直到最后一对男女配对成功。

思路:
  1. 先确定存储的数据类型:可以确定的一点该题对数据的遍历远远大于修改(要一遍遍去匹配),故对于原始数据的存储用ArrayList(底层数据结构为数组)。
  2. 建立Person类:结合题目以及给的文件可以确定有七个属性,分别为ID, 样貌,品格,财富 , 期望样貌,期望品格,期望财富。主角样本的id为性别另外区别。
  3. 读取并存储:从给的文件来看,一行一行读取并写入到集合当中去。从题目要求看每次选出对象后主角要移除,原本数据要恢复。所以要另外创立两个集合来存储原始数据。
  4. 算法分析:
    1).从主角样本中拿到主角,并根据id加入到对应的样本中去
    2).男生开始根据自己的要求选择一位女生(可以是任何女士,但只能选择一位)。若两位女生得分相同,则看女生的样貌,品格,财富总值谁高选谁;在男生选女生的同时统计有哪些女生被选过且有多少男生选择她。
    3).统计哪位女生被男生选择的次数最多(即为最受欢迎的女生)。
    4).最受欢迎的女生在选择自己的男生里选择一位男生。选择标准:得分最高(若分数一样则看前三项加起来的值,若值还一样则比较id,选id较小的)
    5).若择偶成功的一对里面包含主角则匹配成功,然后从样本中剔除主角,原本数据恢复。反之,在男女集合中剔除这两个人,继续上面的步骤直到长度最小的集合
  5. 把主角一个个拿去匹配并打印出结果。

具体实现:

Person实现类:
package com.tulun.people;

import lombok.*;
/**
 * @author:liguozheng
 * @Date:2018/10/24
 * @time:17:01
 * @description:
 */
@NoArgsConstructor 
@AllArgsConstructor
@Setter
@Getter
@ToString
public class Person {

    private int id;        //ID
    private int appearance ;  //样貌
    private int treasure ;    //品格
    private int character ;   //财富
    private int appearanceLook;   //样貌期望
    private int treasureLook;     // 品格期望
    private int characterLook;    //财富期望
    
}
工具类Run:
package com.tulun.main;

import com.tulun.people.Person;
import java.io.*;
import java.util.*;

/**
 * @author:liguozheng
 * @Date:2018/10/24
 * @time:21:46
 * @description:
 */

@SuppressWarnings("all")
public class Run <K,V>{

    private ArrayList<Person> maleList;
    private ArrayList<Person> femaleList;
    private ArrayList<Person> playersList;
    private ArrayList<Person> man ;
    private ArrayList<Person> mon ;
    int id;

    public Run(String malePath,String femalePath,String playersPath) throws IOException {

        this.mon = new <Person>ArrayList();
        this.man = new <Person>ArrayList();
        this.maleList = new <Person>ArrayList();
        this.femaleList = new <Person>ArrayList();
        this.playersList = new<Person> ArrayList();

        this.mon.addAll(saveCount(femalePath));
        this.man.addAll(saveCount(malePath));
     
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值