`
lgstarzkhl
  • 浏览: 334397 次
  • 性别: 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-均值算法

    4. **更新聚类中心**:在所有数据点分配完成后,每个簇的聚类中心被更新为该簇内所有点的几何中心,即平均位置。 5. **重复步骤3和4**:这一过程持续进行,直到聚类中心不再显著移动或达到预定的最大迭代次数。 在...

    java 任务分配样例3

    在Java开发中,Quartz 2是一个非常强大的作业调度库,它允许开发者安排任务并在特定时间执行。在本文中,我们将深入探讨如何使用`@PersistJobDataAfterExecution`和`@DisallowConcurrentExecution`注解来通过...

    java kmeans聚合算法

    Java KMeans聚类算法是一种广泛应用的数据挖掘技术,用于将数据集分成不同的组或“簇”,使得同一簇内的数据点彼此相似,而不同簇之间的数据点差异较大。在本例中,描述提到了从Pascal语言转换到Java实现,这意味着...

    调度算法 java源代码

    在IT领域,调度算法是操作系统的核心组成部分之一,它负责决定如何在多任务环境中有效地分配处理器资源。本项目涉及的是一个用Java语言实现的调度算法,主要用于处理进程的调度问题。Java作为一种面向对象、跨平台的...

    红包随机算法实现

    下面将详细讲解如何使用Java实现一个公平的红包随机分配算法。 1. **红包算法的基本原理** 红包算法的核心是确保每个用户在抢红包时,无论先抢后抢,其获得的金额期望值大致相同。为了实现这个目标,我们需要考虑...

    java 作业调度算法

    SJF算法旨在最小化平均周转时间,优先选择预计运行时间最短的任务执行。在Java中,可以使用优先级队列(PriorityQueue)来存储待执行的任务,任务的优先级由其预计运行时间决定。这种方法通常能提高系统效率,但不...

    java 进程调度算法模拟

    在Java中实现这些算法,通常需要定义一个进程类来存储进程信息(如进程ID、到达时间、执行时间、优先级等),并编写调度器类来管理进程队列,模拟CPU的分配。你可以通过`src`目录中的代码,了解如何用Java编程实现...

    java进程调度算法

    2. 短进程优先(SPF,Shortest Process First):此算法优先选择执行时间最短的进程,以减少平均等待时间。在Java中,可以使用优先级队列来实现这个策略,其中进程的优先级由其执行时间决定。 3. 时间片轮转(RR,...

    操作系统的cpu分配算法实践

    操作系统是计算机系统的核心组成部分,负责管理和协调硬件与软件资源,其中CPU(中央处理器)的分配算法是操作系统设计中的重要一环。在这个实验“操作系统的CPU分配算法实践”中,我们将探讨几种不同的CPU调度策略...

    java版本大数据各种算法集合

    K-Means是最常用的聚类算法,通过迭代调整质心和数据分配,直至达到稳定状态。此外,层次聚类(Hierarchical Clustering)如单链、全链和平均链方法,以及DBSCAN(基于密度的聚类)也是重要的聚类手段。 链接挖掘...

    java实现网页排名算法

    4. **平滑处理**:为了解决没有出链的网页(“dangling nodes”)问题,可以将这些网页的PageRank平均分配给所有网页,避免PageRank值流失。 在Java中实现PageRank,我们可以遵循以下步骤: 1. **构建链接矩阵**:...

    Kmeams与EM算法的java版本

    Kmeans.java文件应该包含了K-means算法的Java实现,可能包括数据点的表示、质心的计算、簇的分配等关键函数。 期望最大化(EM)算法主要用于含有隐变量的概率模型参数估计,常用于混合高斯模型(GMM)的聚类。EM...

    操作系统调度算法java源代码

    SJF算法试图通过优先执行预计运行时间最短的进程来减少平均周转时间和平均等待时间。它分为非抢占式和抢占式两种形式。在非抢占式SJF中,一旦进程开始执行,就一直执行到完成;而在抢占式SJF中,如果后来的进程预计...

    Java模拟操作系统实验之四种进程调度算法实现(FCFS,SJF,RR,HRN)

    本文将深入探讨Java环境下实现的四种进程调度算法:先来先服务(FCFS)、短作业优先(SJF)、时间片轮转(RR)以及高响应比优先(HRN)。这些算法在多任务环境中用于决定哪个进程应该获得CPU的执行权,以达到资源分配的公平...

    Java算法集锦,所有排序算法

    在编程领域,尤其是在Java开发中,理解并掌握各种排序算法是至关重要的技能。"Java算法集锦"这个资源集合了多种排序算法的实现,旨在帮助开发者深入理解和运用这些经典算法。下面将详细介绍其中的一些关键算法及其...

    操作系统 核心算法模拟 java swing

    根据给定的文件信息,我们可以总结出以下关键的IT知识点,这些知识点主要集中在操作系统的核心算法模拟上,使用Java Swing作为图形用户界面的实现工具。 ### 1. 处理器调度算法 处理器调度是操作系统中的一项核心...

    Java各种排序算法

    【Java各种排序算法详解】 排序算法是计算机科学中不可或缺的一部分,尤其在编程语言如Java中,理解并掌握各种排序算法的原理与应用至关重要。本文将详细介绍几种常见的Java排序算法,包括它们的工作机制、优缺点...

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

    同时,程序还统计了平均申请内存大小,这对于了解系统的平均内存需求和资源分配的效率至关重要。内存利用率的计算可以帮助评估算法的性能,而运行时间的记录则反映了算法的效率。 测试程序的输出结果将包括这些关键...

    Java各种排序算法(含代码)

    在编程领域,排序算法是数据结构与算法学习中的基础部分,尤其在Java中,了解和掌握各种排序算法对于提升程序性能至关重要。以下是对标题和描述中提到的Java各种排序算法的详细解释,以及它们的实现代码概述。 1)*...

Global site tag (gtag.js) - Google Analytics