`
The_Apocalypse
  • 浏览: 7474 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

算法:排列组合的算法实现C(N,M)

 
阅读更多

1:算法主要结合二进制实现从n个数里面选择m个  (其实就是判断一个整数对应的二进制各位的值)

2:不考虑效率问题的话算法比较容易理解

 

代码如下:

 

package algorithm;

public class ERjinzhiyupailiezuhe {

	/**
	 * 用二进制判断排列组合
	 * 这个算法求的事n个里边求m
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] a = new int[] { 1, 2, 3, 4, 5 };
		//a为原数组
		int[] b = new int[] { 0, 0, 0, 0, 0 };
		//b位换算成二进制后各位的值
		// 本程序为5选3的实例,大家可根据需要相应修改
		for (int i = 0; i < 32; i++) {//二进制五位最大值小于32
			int n = 0;
        //判断各位值,n用来统计5位中有几个位的值是1
			if (i % 2 >= 1) {
				b[4] = 1;
				n++;
			} else
				b[4] = 0;
			if (i % 4 >= 2) {
				b[3] = 1;
				n++;
			} else
				b[3] = 0;
			if (i % 8 >= 4) {
				b[2] = 1;
				n++;
			} else
				b[2] = 0;
			if (i % 16 >= 8) {
				b[1] = 1;
				n++;
			} else
				b[1] = 0;
			if (i % 32 >= 16) {
				b[0] = 1;
				n++;
			} else
				b[0] = 0;

			if (n == 3) {

				for (int j = 0; j < 5; j++) {
					if (b[j] == 1)
						Print.print(a[j]);
					b[j] = 0;
				}
				//按位输出
				System.out.print(" "+i);
				System.out.println();
			}
		}
	}
}

输出结果如下:

345 7
245 11
235 13
234 14
145 19
135 21
134 22
125 25
124 26
123 28

 

 

1
3
分享到:
评论

相关推荐

    java排列组合算法

    排列组合 排列 组合 java排列组合算法 排列组合算法

    经典算法全部用C语言实现

    以下算法均用C语言实现,代码可运行 老掉牙 河内塔 费式数列 巴斯卡三角形 三色棋 老鼠走迷官(一) 老鼠走迷官(二) 骑士走棋盘 八个皇后 八枚银币 生命游戏 字串核对 双色、三色河内塔 背包问题...

    c(m,n)算法

    关于C(m,n)算法的代码,自己写的,和大家分享,希望大家能多多指教

    实现数学公式C(n,m)的java程序

    该代码实现功能为数学中的C(n,m),n为下标,m为上标。

    算法之排列算法与组合算法详解

    本文介绍了常用的排列组合算法,包括全排列算法,全组合算法,m个数选n个组合算法等。 2. 排列算法 常见的排列算法有: (A)字典序法 (B)递增进位制数法 (C)递减进位制数法 (D)邻位对换法 (E)递归法 介绍常用的两种...

    JS实现的排列组合算法示例

    本文实例讲述了JS实现的排列组合算法。分享给大家供大家参考,具体如下: 在数学中有排列组合,用来计算概率。 比如:从4个数字中,任意选择两个的情况。从5个数字中任意选择3个数字的情况。(这里我们只考虑没有...

    C语言实现的排列组合问题的通用算法、解决方法

    由于排列组合问题总是先取组合再排列,并且单纯的排列问题相对简单,所以本文仅对组合问题的实现进行详细讨论。以在n个数中选取m(0&lt;m&lt;=n)个数为例,问题可分解为: 1. 首先从n个数中选取编号最大的数,然后在...

    排列和组合算法的实现方法_C语言经典案例

    排列和组合算法是考查递归的常见算法,这两种算法能用递归简洁地实现。 本人在经过多次摸索和思考之后,总结如下,以供参考。 程序代码如下: #include #include char array[] = abcd; #define N 4 #define M 3 ...

    经典算法(C语言)包含51个经典算法的C语言实现

    27.排列组合 60 28.格雷码(Gray Code) 61 29.产生可能的集合 63 30.m元素集合的n个元素子集 66 31.数字拆解 68 32.得分排行 71 33.选择、插入、气泡排序 73 34.Shell 排序法 - 改良的插入排序 77 35.Shaker 排序法...

    字符串的组合算法问题的C语言实现攻略

    假设我们想在长度为n的字符串中求m个字符的组合。我们先从头扫描字符串的第一个字符。针对第一个字符,我们有两种选择:第一是把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选取m-1个字符;第二是不把...

    钱币组合方法问题

    钱币组合方法问题 钱币组合方法问题 钱币组合方法问题 设有n种不同的钱币各若干,可用这n种钱币产生许多不同的面值。 如给定面值7分,有1分3张,2分3张,5分1张,能组成给定面值7分的方法有如下4种: 3个1分+2个2分...

    C语言经典算法大全

    排列组合 格雷码(Gray Code) 产生可能的集合 m元素集合的n个元素子集 数字拆解  排序 得分排行 选择、插入、气泡排序 Shell 排序法 - 改良的插入排序 Shaker 排序法 - 改良的气泡排序 Heap 排序法 - ...

    C语言 经典算法 算法大全

    C语言经典算法,包括1.汉若塔 2 2.费式数列 3 3. 巴斯卡三角形 4 4.三色棋 5 5.老鼠走迷官(一) 7 6.老鼠走迷官(二) 9 7.骑士走棋盘 10 8.八皇后 13 9.八枚银币 15 10.生命游戏 17 11.字串核对 20 12.双色、三色...

    排列组合的具体组合

    本实验可以求出任意的组合个数以及组合的具体形式,具体数据,并采用了C++的sti告警编程实现。

    常用算法代码

    递归方法求解排列组合问题 30 | 类循环排列 30 | 全排列 30 | 不重复排列 30 | 全组合 31 | 不重复组合 31 | 应用 31 模式串匹配问题总结 32 | 字符串 HASH 32 | KMP 匹配算法 O(M+N) 32 | KARP-RABIN ...

    Java和C语言实现各种经典算法(含代码图例)

    Java和C语言实现各种经典算法(含代码图例) 老掉牙 河内塔 费式数列 巴斯卡三角形 三色棋 老鼠走迷官(一) 老鼠走迷官(二) 骑士走棋盘 八个皇后 八枚银币 生命游戏 字串核对 双色、三色河内塔 背包...

    经典算法大全.pdf

    洗扑克牌(乱数排列) 58 25.Algorithm Gossip: Craps赌博游戏 60 26.Algorithm Gossip: 约瑟夫问题(Josephus Problem) 62 27.Algorithm Gossip: 排列组合 64 28.Algorithm Gossip: 格雷码(Gray ...

Global site tag (gtag.js) - Google Analytics