`
lgstarzkhl
  • 浏览: 328370 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

java平均分配算法

    博客分类:
  • java
阅读更多
100个数平均分配到指定数量的人
第一种方法
public class Fenpei {

	static List<Integer> listCus = new ArrayList<Integer>();

	static List<String> persons = new ArrayList<String>();

	// static Map<String, String> result = new HashMap<String, String>();
	static List<Persons> result = new ArrayList<Persons>();

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		int k = 0;
		List l = new ArrayList();

		// 发、数量
		for (int i = 0; i < 20; i++) {
			listCus.add(i);
		}
		// 人
		for (int j = 0; j < 5; j++) {
			persons.add("person" + j);
		}

		// System.out.println(persons.size());

		int personSize = persons.size();

		for (int i = 0; i < listCus.size(); i++) {
			// System.out.println(i);
			// System.out.println(persons.get(i%personSize));
			Persons p = new Persons();
			p.setI(i);
			p.setPersonname(persons.get(i % personSize));
			result.add(p);
		}
		Iterator it = result.iterator();

		while (it.hasNext()) {
			Persons p = (Persons) it.next();
			System.out.println("哪个人 => " + p.getI() + " 分配到 "
					+ p.getPersonname());
		}

		// for (int j = 1; j < persons.size() + 1; j++) {
		// System.out.println(j);
		// }

	}

	public static class Persons {
		private Integer i;

		private String personname;

		public Integer getI() {
			return i;
		}

		public void setI(Integer i) {
			this.i = i;
		}

		public String getPersonname() {
			return personname;
		}

		public void setPersonname(String personname) {
			this.personname = personname;
		}
	}

}


第二种方法

public class FenpeiRen {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Person p1 = new Person("NAME1", 201);
		Person p2 = new Person("NAME2", 233);
		Person p3 = new Person("NAME3", 189);

		Person p4 = new Person("NAME4", 198);
		Person p5 = new Person("NAME5", 164);
		Person p6 = new Person("NAME6", 181);
		Person p7 = new Person("NAME7", 212);
		Person p8 = new Person("NAME8", 205);
		Person p9 = new Person("NAME9", 192);
		Person p10 = new Person("NAME10", 241);
		Person p11 = new Person("NAME11", 136);
		Person p12 = new Person("NAME12", 201);
		Person p13 = new Person("NAME13", 142);
		Person p14 = new Person("NAME14", 127);
		Person p15 = new Person("NAME15", 189);
		Person p16 = new Person("NAME16", 221);
		List<Person> personList = new ArrayList<Person>();
		personList.add(p1);
		personList.add(p2);
		personList.add(p3);
		personList.add(p4);
		personList.add(p5);
		personList.add(p6);
		personList.add(p7);
		personList.add(p8);
		personList.add(p9);
		personList.add(p10);
		personList.add(p11);
		personList.add(p12);
		personList.add(p13);
		personList.add(p14);
		personList.add(p15);
		personList.add(p16);
		sort(personList,5);
	}

	/**
	 * 分组函数
	 * 
	 * @param personList
	 *            总人数列表
	 * @param groupCount
	 *            分组数量
	 */
	static void sort(List<Person> personList, int groupCount) {
		// 取得总人数
		int personSize = personList.size();
		// 如果分组数量小于personsize,则分组
		if (groupCount <= personSize) {
			// 先排序
			Collections.sort(personList, new Comparator<Person>() {
				public int compare(Person p1, Person p2) {
					return p1.get_capability().compareTo(p2.get_capability());
				}
			});
			// 可以取多少次
			int qU = (personSize / groupCount) + 1;

			List<List<Person>> pList = new ArrayList<List<Person>>();
			// 排序后的数量
			List<List<Person>> sortList = new ArrayList<List<Person>>();
			// 分组排序后的数据
			for (int i = 0; i < qU; i++) {
				List<Person> getPerson = new ArrayList<Person>();
				for (int j = 0; j < groupCount; j++) {
					int index = 0;
					if (j == 0) {
						index = i + j;
					} else {
						index = (j) * groupCount + i;
					}
					if(index<personSize){
						getPerson.add(personList.get(index));
					}
				}
				if(getPerson.size()>0){
					sortList.add(getPerson);
				}
			}
			
			//开始分配
			for (int j = 0; j < groupCount; j++) {
				List<Person> listPerson = new ArrayList<Person>();
				boolean sort = true;
				for (int i = 0; i < sortList.size(); i++) {
					//正向分
					if(sort){
						if(j<sortList.get(i).size()){
							listPerson.add(sortList.get(i).get(j));
						}
						sort=false;
					}
					else{//反向分
						if(groupCount-(j+1)<sortList.get(i).size()&&groupCount-(j+1)>=0){
							listPerson.add(sortList.get(i).get(groupCount-(j+1)));
						}
						sort=true;
					}
				}
				if(listPerson.size()>0){
					pList.add(listPerson);
				}
			}
			int m = 0;
			for (List<Person> lp : pList) {
				m++;
				System.out.print("当前第 "+m+" 组\r\n");
				int totalCa = 0;
				for(Person p : lp){
					totalCa = totalCa + p.get_capability();
					System.out.print("能力 "+p.get_capability()+" 名字 "+p.get_name());
				}
				System.out.print("总能力 "+totalCa+"\r\n");
				System.out.print("结束\r\n");
			}
		}else{
			System.out.println("无法分组,分组数量大于总人数\r\n");
		}
		// Collection.sort();
	}

}
分享到:
评论
1 楼 qiankai86 2013-01-06  
Thank you!

相关推荐

    JAVA实现K-均值算法

    本人原创的K均值聚类算法,可支持不限维度的多维空间点的聚类。以欧氏距离为相似度量,接口分离,易改写。采用JAVA语言实现。

    java 任务分配样例3

    java 任务分配样例 In this page we will walk through Quartz 2 scheduler passing parameters to Job with JobDataMap using @PersistJobDataAfterExecution and @DisallowConcurrentExecution example.

    内存管理-最先适应算法和最佳适应算法-模拟程序

    设计了一个内存管理模拟程序,实现了最先适应算法和最佳适应算法,可以手动申请内存大小,释放内存,同时附有测试程序,可设置测试次数,同时统计了平均申请内存大小,内存利用率及运行时间。

    Java各种排序算法

    Java各种排序算法,1)插入排序(直接插入排序、希尔排序) 2)交换排序(冒泡排序、快速排序) 3)选择排序(直接选择排序、堆排序) 4)归并排序 5)分配排序(箱排序、基数排序) 所需辅助空间最多:归并排序...

    Java基于动态分区算法(FF_BF_WF)的内存分配模拟程序源码+项目说明.zip

    6. 用户可随时添加新进程,输入进程名和长度后程序按照当前的分配算法进行分配,内存默认分配空闲内存块的高地址部分。 7. 当申请内存容量大于任意一块空闲内存的大小时,将实行紧凑算法,程序将从后向前搜索空闲...

    StockPredictionAlgorithm:Java的股票预测算法程序

    算法 目前,我的术语项目分析程序由 Java 组成。 首先,整体的实现方法是找一条移动平均线来找到一个交易点。 移动平均线是很多人在炒股的参考资料,不能忽视,因为信息量很大。 下图是买卖算法的代码实现。 首先,...

    leetcode蓄水池JAVA-Algorithm-in-Java:算法学习日记

    Java中的算法 进度: 2018 5/1 重温 Java 中的基本数据结构 7/18 LC 60 7/30 LC 100 8/5 LC 117 8/9 LC 130 8/14 LC 147 9/9 LC 176 2019年 5/29 LC 209 实现 BinaryIndexedTree。 7/31/18 位操作。 需要更多了解 ...

    2022年广工操作系统实验(源代码+实验报告)(Java版)

    了解动态分区分配方式中的数据结构和分配算法,并进一步加深对动态分区存储管理方式及其实现过程的理解。 4、实验四 仿真各种磁盘调度算法 由系统产生一系列磁盘请求(10个),分别给出先来先服务算法、最短寻道...

    进程调度模拟 该系统用Java开发,电子文档和源代码

    本实验的目的是编程模拟实现几种常见的进程调度算法,通过对几组进程分别使用不同的调度算法,计算进程的平均周转时间和平均带权周转时间,比较各种算法的性能优劣。1.系统环境: JDK1.5 系统语言: Java

    几种简单的负载均衡算法及其Java代码实现

    负载均衡能够平均分配客户请求到服务器阵列,借此提供快速获取重要数据,解决大量并发访问服务问题,这种集群技术可以用少的投资获得接近于大型主机的性能。  负载均衡分为软件负载均衡和硬件负载均衡,前者的代表...

    操作系统 进程调度(时间片轮转)银行家算法 作业调度

    设计一个按时间片轮转法实现进程调度的程序。 [提示]: (1) 假定系统有五个进程,每一...输出:相应作业调度算法下,各作业的等待时间、周转时间、带权周转时间,这批作业的调度顺序、平均周转时间和平均带权周转时间。

    本科毕业设计源码,含论文,课题名称:基于Web的大学生计算机设计大赛报名网站的开发

    平均分配算法(自行设计,目前能用,比较简单,后续更新) JWT MyBatis-plus和MyBatis-plus-join链表查询插件 alibaba druid连接池 Spring Security登录鉴权 element-ui axios vuex vue-router 已知bug 点击消息列表...

    percolation:算法课程联合查找分配的解决方案

    算法课程联合查找分配的渗流解决方案。 来自课程的测试输入%java PercolationStats 200100平均值= 0.5929934999999997 stddev = 0.00876990421552567 95%置信区间= 0.5912745987737567、0.5947124012262428 %...

    达内 coreJava 习题答案

    import java.util.Scanner; class Bissextile{ public static void main(String[] arge){ System.out.print("请输入年份"); int year; //定义输入的年份名字为“year” Scanner scanner = new Scanner(System.in...

    解决分布式数据插入数据库~一致性hash算法

    随着虚拟节点的增加,数据量分配就比较平均了,但是并不是虚拟节点数量越多就越好,因为要考虑这些虚拟节点带来的性能开销以及算法的复杂性;

    并行计算课程设计(代码+执行文件+文档)

    当然这是理想的划分情况,如果划分步骤不能达到平均分配的目的,那么结果的效率会相对较差。 伪代码如下: BEGIN N=_MAX; FOR1 I=0;I;I++ X1=RANDOM(); Y1=RANDOM(); Z1=RANDOM(); IF (X1*X1+Y1*Y1+Z1*Z1) ...

    并行计算课程设计(报告+代码+可执行文件)

    当然这是理想的划分情况,如果划分步骤不能达到平均分配的目的,那么结果的效率会相对较差。 伪代码如下: BEGIN N=_MAX; FOR1 I=0;I;I++ X1=RANDOM(); Y1=RANDOM(); Z1=RANDOM(); IF (X1*X1+Y1*Y1+Z1*Z1) ...

    基于赤字轮询的mm3队列模拟java代码

    获得每个队列的平均队列长度,平均等待时间,队列长度分布和等待时间分布。 报告中应包括任何必要的解释和说明。 Multi-queue simulation Description: a transmission system subject to 3 inputs and only one ...

    重庆大学操作系统试卷2015

    1、哪种CPU调度算法的平均等待时间最短( B ) (A)非抢占型(non-preemptive)SJF (B)抢占型(preemptive)SJF (C)FCFS (D)RR 2、外部碎片说法正确的是( C ) (A)相对于内部碎片,外部碎片在操作系统内核...

Global site tag (gtag.js) - Google Analytics