文档章节

Java 排列 组合 组合后排列

爱吃窝窝头
 爱吃窝窝头
发布于 2015/10/17 20:59
字数 784
阅读 97
收藏 1

Java 实现排列、组合、组合后排列!从m个里面选n个问题!今晚笔试同程旅游,最后一个编程题:关于排列组合的,原题的意思是:由 1,2,3,4这四个数字中选出3个数字,然后这些数最后能组合成多少个数?

问题一

由 1,2,3,4这四个数字中选出3个数字,然后这些数最后能组合成多少个数?

先上代码:

public class Main
{

	public static final int n = 3;

	public static int m = 4;

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

		int[] array = new int[n];
		f(array, 0);

	}

	public static void f(int[] array, int now)
	{

		if (now >= n)
		{

			for (int i : array)
			{
				System.out.print(i + " ");
			}
			System.out.println();
			return;
		}
		else
		{
			for (int start = 1; start <= m; start++)
			{

				array[now] = start;
				if (j(array, now))// 判断是否出现重复
				{
					f(array, now + 1);
				}

			}
		}

	}

	public static boolean j(int[] array, int now)
	{

		for (int i = 0; i <= now; i++)
		{

			for (int j = i + 1; j <= now; j++)
			{
				if (array[i] == array[j])
				{
					return false;
				}
			}
		}
		return true;

	}
}

结果是

一共24个程序运行结果如下:

1 2 3 

1 2 4 

1 3 2 

1 3 4 

1 4 2 

1 4 3 

2 1 3 

2 1 4 

2 3 1 

2 3 4 

2 4 1 

2 4 3 

3 1 2 

3 1 4 

3 2 1 

3 2 4 

3 4 1 

3 4 2 

4 1 2 

4 1 3 

4 2 1 

4 2 3 

4 3 1 

4 3 2 

问题二(排列问题)

那么问题来了,我只想要对4个数全排列,我该怎么做呢?只要对n的值做修改就OK了,是不是很简单?

public class Main
{

	public static final int n = 4;//改这个地方

	public static int m = 4;

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

		int[] array = new int[n];
		f(array, 0);

	}

	public static void f(int[] array, int now)
	{

		if (now >= n)
		{

			for (int i : array)
			{
				System.out.print(i + " ");
			}
			System.out.println();
			return;
		}
		else
		{
			for (int start = 1; start <= m; start++)
			{

				array[now] = start;
				if (j(array, now))// 判断是否出现重复
				{
					f(array, now + 1);
				}

			}
		}

	}

	public static boolean j(int[] array, int now)
	{

		for (int i = 0; i <= now; i++)
		{

			for (int j = i + 1; j <= now; j++)
			{
				if (array[i] == array[j])
				{
					return false;
				}
			}
		}
		return true;

	}
}

问题三(组合问题)

那么问题来了?如果我们只是想单纯的从4个数字中选3个数字,怎么来实现呢?废话不多说:见下面代码,下面的代码是基于上面加工而成,所以简洁明了!

public class Main
{

	public static final int n = 3;

	public static int m = 4;

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

		int[] array = new int[n];
		f(array, 0, 1);

	}

	public static void f(int[] array, int now, int start)
	{

		if (now >= n)
		{

			for (int i : array)
			{
				System.out.print(i + " ");
			}
			System.out.println();
			return;
		}
		else
		{
			for (; start <= m; start++)
			{

				array[now] = start;
				if (j(array, now))
				{
					f(array, now + 1, start + 1);
				}

			}
		}

	}

	public static boolean j(int[] array, int now)
	{

		for (int i = 0; i <= now; i++)
		{

			for (int j = i + 1; j <= now; j++)
			{
				if (array[i] == array[j])
				{
					return false;
				}
			}
		}
		return true;

	}
}

程序输出结果如下:

1 2 3 

1 2 4 

1 3 4 

2 3 4 

总结:排列组合问题往往是穷举法的一种体现形式,所以,还是要掌握好的!

© 著作权归作者所有

共有 人打赏支持
上一篇: 找零钱问题
爱吃窝窝头
粉丝 1
博文 42
码字总数 13245
作品 0
南京
私信 提问
matlab数学计算!!!

可靠度的置信下限的计算: 公式的含义是 Int a=0; For( int k=0;k<=f;k++) { a=a+C(n,k)*(R的(n-k)次方)*((1-R)的k次方); } 注意其中C(n,k)表示从n取k的排列组合:C(n,k)=(k!)/(...

liuwanjie
2014/01/07
267
1
java中多个list的组合算法,跪求高手解答

问题是这样的 比如有 三个list: list A = {a,b,c} list B = {d,e,f} list c = {x,y,z} 要将几个list的内容进行组合 结果为 adx,ady,adz,aex,aey,aez,afx,afy,afz....依次类推 一共 3*3*3=27...

peter1112
2013/07/04
3.7K
5
IKAnalyzer的网友评论

IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer已经推出 了3个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词...

红薯
2009/12/11
595
1
Java 工具集 Hutool 4.0.8 发布,新特性和 bug 修复

Hutool是一个Java工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法,让Java语言也可以“甜甜的”。Hutool最初是我项目中“util”包的一个整理,后来慢慢积累并加入更多非...

路小磊
2018/03/21
1K
14
【PDF分享】IKAnalyzer中文分词器V3.2.3使用手册.pdf

IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer已 经推出 了3个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词...

红薯
2010/09/13
909
0

没有更多内容

加载失败,请刷新页面

加载更多

开始看《Java学习笔记》

虽然书买了很久,但一直没看。这其中也写过一些Java程序,但都是基于IDE的帮助和对C#的理解来写的,感觉不踏实。 林信良的书写得蛮好的,能够帮助打好基础,看得出作者是比较用心的。 第1章概...

max佩恩
昨天
12
0
Redux 三大原则

1.单一数据源 在传统的MVC架构中,我们可以根据需要创建无数个Model,而Model之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在Redux中都是不被允许的。 因为在Redux的思想里,一个...

wenxingjun
昨天
8
0
跟我学Spring Cloud(Finchley版)-12-微服务容错三板斧

至此,我们已实现服务发现、负载均衡,同时,使用Feign也实现了良好的远程调用——我们的代码是可读、可维护的。理论上,我们现在已经能构建一个不错的分布式应用了,但微服务之间是通过网络...

周立_ITMuch
昨天
4
0
XML

学习目标  能够说出XML的作用  能够编写XML文档声明  能够编写符合语法的XML  能够通过DTD约束编写XML文档  能够通过Schema约束编写XML文档  能够通过Dom4j解析XML文档 第1章 xm...

stars永恒
昨天
2
0
RabbitMQ学习(2)

1. 生产者客户端 void basicPublish(String exchange, String routingKey, boolean mandatory, boolean immediate, BasicProperties props, byte[] body) 1. 在生产者客户端发送消息时,首先......

江左煤郎
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部