`
lgstarzkhl
  • 浏览: 335885 次
  • 性别: 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实现

    Java作为一种广泛应用的编程语言,提供了丰富的工具来实现各种排序算法。以下将详细解释标题和描述中涉及的几种排序算法的Java实现。 1. **计数排序(RadixSort.java)** 计数排序是一种非基于比较的排序算法,适用...

    JAVA实现K-均值算法

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

    基于Java实现的pagerank算法.zip

    然后,算法会根据链接关系分配PageRank值,一个网页的PageRank值会被平均分给链接出去的所有网页。同时,为了防止循环链接(如A链接B,B链接回A)导致PageRank值无法收敛,引入了一个damping factor(衰减因子,通常...

    java-hashmaptreemap的算法实现和应用

    HashMap提供了O(1)的平均时间复杂度来执行插入、删除和查找操作,但在最坏的情况下,如果哈希函数分配得不好,可能会退化为O(n)。 而TreeMap则使用了红黑树(一种自平衡二叉查找树)作为其底层实现。这意味着每个...

    凝聚层次聚类算法JAVA实现.docx

    凝聚层次聚类算法的实现相对复杂,但下面是一个简化的JAVA代码示例,可以帮助理解其实现的基本思路: ```java import java.util.ArrayList; import java.util.List; public class AgglomerativeClustering { ...

    分酒_java_算法_

    每一步可以视为从当前的瓶子中选择一部分倒入新的空瓶,直到所有酒均被平均分配。 Java语言作为面向对象的编程语言,非常适合解决这类问题。我们可以定义一个`Bottle`类来表示每瓶酒,包括它的容量和当前的剩余量。...

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

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

    java实现网页排名算法

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

    algorithm:Java算法

    Java中,贪心算法常用于解决资源分配、任务调度等问题,如霍夫曼编码、活动选择问题等。 九、分治策略 分治策略将大问题分解为小问题,分别解决后再合并答案。Java中的快速排序、归并排序就是分治策略的典型应用。 ...

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

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

Global site tag (gtag.js) - Google Analytics