`
thanq
  • 浏览: 13394 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

排列组合的C,Java,JavaScript实现

 
阅读更多

题目源自: Linux C编程一站式学习的习题

欢迎拍砖~

c版

#include <stdio.h>
#define N 5
#define M 5
#define IS_COMBINATION 1

int arr[N];

void printArr(void){
	int j = M,i ;
	if(IS_COMBINATION){
		for(i=0;i<M-1;i++){
			if(arr[i]>arr[i+1])return;
		}
	}
	for(i=0;i<j;i++){
		printf("%d ",arr[i]);
	}
	printf("\n");
}

void swap(int i , int j){
	int temp = arr[i];arr[i]=arr[j];arr[j]=temp;
}

void permutation(int k){
	int i = N-k;
	if(k==N-M){
		printArr();
		return;
	}
	for(;i<N;i++){
		swap(N-k,i);
		permutation(k-1);
		swap(N-k,i);
	}
}

int main(void){
	int i = 0 ;
	for(;i<N;i++ ){arr[i]=i+1;}
	permutation(N );
	return 0;
}

 

 

java版

	static int N = 5,M=3;
	static boolean IS_COMBINATION = false;
	
	static int[] arr = new int[N];
	
	static void print(){
		if(IS_COMBINATION){
	        for(int i=0;i<M-1; i++){
		            if(arr[i]>arr[i+1]){
		                return;
		            }
	            }
        }
		System.out.println(Arrays.toString(Arrays.copyOfRange(arr, 0, M)));
	}
	
	static void swap(int i , int j){
		arr[i]=arr[j]+0*(arr[j]=arr[i]);
	}
	
	static void permutation(int k){
		if(k==N-M){
			print();
			return;
		}
		for (int i = N-k; i < N; i++) {
			swap(i, N-k);
			permutation(k-1);
			swap(i, N-k);
		}
	} 
	
	public static void main(String[] args) {
		for (int i = 0; i < N; i++) {
			arr[i]=i+1;
		}
		permutation(N);
	}

 

 

javascript版

var N = 5,M = 1 , IS_COMBINATION = true ;
var arr  = [] ;
for(var i = 0 ; i<N  ;i++){
    arr[i]=i+1;
}

var print = function(){
    if(IS_COMBINATION){
        for(var i=0;i<M-1; i++){
            if(arr[i]>arr[i+1]){
               // console.log(arr);
                return;
            }
        }
    }
    console.log(arr.slice(0,M));
}

var swap = function(i,j){
    arr[i]=arr[j]+0*(arr[j]=arr[i]);
}

var permutation = function(k){
    if(k==N-M){
        print();
        return;
    }
    for(var i = N-k ; i< N  ; i++){
        swap(N-k,i);
        permutation(k-1);
        swap(N-k,i);
    }
}

permutation(N);

 

 

1
0
分享到:
评论

相关推荐

    Java-C-JS数据结构与算法合集

    《Java-C-JS数据结构与算法合集》是针对编程领域的三大主流语言——Java、C和JavaScript,深入探讨数据结构与算法的宝贵资源。数据结构是计算机存储、组织数据的方式,而算法是解决问题的精确步骤,它们是软件开发的...

    华为OD机试C卷- 数字排列(Java & JS & Python & C & C++).md-私信看全套OD代码及

    ### 华为OD机试C卷 - 数字排列(多语言实现) #### 题目背景 本题目属于华为OD机试中的一道经典题目,旨在考察应聘者对递归算法的理解及其应用能力,同时也涉及到了字符串处理和数据结构的应用。 #### 题目概述 ...

    2016年蓝桥杯java高职C组.docx

    - 排列组合:第五题实际上涉及到组合问题,尽管代码直接列举了所有可能的组合,而没有使用组合计算的方法。 4. **编程规范** - 注释:尽管题目中没有要求添加注释,但在实际开发中,良好的注释能够帮助理解和维护...

    华为OD机试C卷- 考古学家(Java & JS & Python).md-私信看全套OD代码及解析

    使用递归来遍历所有可能的排列组合,并将结果存储在`List`中。 4. **结果输出**: 对于每一种组合,将其转换为字符串形式并输出。 #### Java实现 Java版本的实现采用了递归的方式来进行全排列计算,并使用`TreeSet`...

    生成字符串的全排列,可以用回溯法实现

    在字符串全排列问题中,我们需要找出一个给定字符集的所有可能的排列组合。例如,对于字符串 "abc",全排列包括 "abc"、"acb"、"bac"、"bca"、"cab" 和 "cba"。这个问题可以使用回溯法来解决,其基本步骤如下: 1. ...

    javascript实现计算器功能

    在JavaScript中实现一个计算器功能,主要涉及到以下几个关键知识点: 1. **事件监听**:为了响应用户的点击操作,我们需要为计算器的各个按钮添加事件监听器。这通常通过`addEventListener`方法来实现,例如,为每...

    华为OD机试C卷- 字符统计及重排(Java & JS & Python).md-私信看全套OD代码及解析

    ### 华为OD机试C卷- 字符统计及重排(Java & JS & Python) #### 题目概述 本题目要求实现一个程序来处理一个由字母组成的字符串(不包含空格)。任务是统计该字符串中每一个字母(区分大小写)出现的次数,并根据...

    java复习题(同名8811).doc

    封装是对象和类概念的基础,它允许我们将数据(属性)和行为(方法)组合在一起,并通过公共接口来访问和修改这些数据,同时隐藏实现细节。在Java中,封装通常通过将属性声明为私有(private),然后提供公有的...

    华为OD机试C卷- 猜密码(Java & JS & Python).md-私信看全套OD代码及解析

    下面提供了该问题的一种Java实现方式,用于生成所有可能的组合: ```java import java.util.*; public class PasswordCombinations { public static void main(String[] args) { Scanner scanner = new Scanner...

    javascript状态栏的字符先杂乱出现再排列组合的代码

    本特效共分两步: 1.在中加入 2.把下面代码加入中 onload=”JSCTimeOutID = window.setTimeout(‘doMessage()’,500);” 例如: [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

    华为OD机试C卷- 田忌赛马(Java & JS & Python & C).md-私信看全套OD代码及解析

    ### 华为OD机试C卷- 田忌赛马(Java & JS & Python & C) #### 题目背景与解析 本题是一道典型的排序与组合问题,旨在考查应聘者对于数据结构的理解和算法设计能力。题目背景取自中国古代的典故“田忌赛马”,要求...

    JAVA期中习题.doc

    在Java中,FlowLayout是最基本的布局管理器,它将组件从左到右排列,每行可以容纳多个组件。如果Frame的宽度改变,按钮的宽度也将改变,而高度保持不变。 二、编译错误 试图编译下面的代码块,将会出现什么结果...

    javascript算法题:求任意一个1-9位不重复的N位数在该组合中的大小排列序号

    具体题目是这样的:  从1–9中选取N个数字,组成不重复的N位数,从小到大进行编号,当输入其中任何一个数M时,能找出该数字对应 的编号。如 N=3,M=213. 输出:[123(1) , 132(2) , 213(3) , 231(4) , 312(5) , 321...

    javascript实现仿百度图片的瀑布流加载效果

    在本文中,我们将探讨如何使用JavaScript来实现一个仿百度图片的瀑布流加载效果。瀑布流布局是一种常见的网页设计模式,通常用于展示图像或项目列表,其中每个元素在垂直方向上排列,而宽度根据屏幕大小自动调整。...

    jsp+js实现可排序表格

    本项目通过结合JavaServer Pages (JSP) 和 JavaScript 技术,实现了用户交互式的可排序表格。JSP主要用于服务器端的数据处理和动态内容生成,而JavaScript则负责在客户端提供用户界面的交互功能。 首先,`table.jsp...

    华为OD机试C卷- 结队编程(Java & JS & Python & C).md-私信看全套OD代码及解析

    ### 华为OD机试C卷 - 结队编程(多语言实现) #### 题目背景与要求 本题目属于华为OD(Outsourcing Development)机试中的一个具体案例,旨在评估应聘者对于数据结构与算法的理解程度及其编程能力。题目要求通过...

    蓝桥杯java历年真题及答案整理(共129道题目及答案).doc

    1. 字符排序算法:在Java中,可以使用递归算法来实现字符的全排列。例如,给定N个不同字符,将这N个字符全排列,最终的结果将会是N!种。如:给定A、B、C三个不同的字符,则结果为:ABC、ACB、BAC、BCA、CAB、CBA一共...

    javascript使用递归算法求两个数字组合功能示例

    在JavaScript编程中,递归算法是一种强大的工具,用于解决复杂问题,尤其是涉及到组合和排列的问题。本示例探讨了如何使用递归算法来找到两个数字的组合。在给定的代码中,目标是生成数组`arr`中的每对数字的所有...

    如何用javascript正则表达式验证身份证号码是否合法

    下面就此实现方法给大家讲解下。  很多时候我们都是通过一组正则表达式来判断用户输入的身份证是否合法,那在用正则表达式判断之前,你对身份证号的组成有多少了解呢?下面来说说一个身份证号里面包含了多少的信息...

Global site tag (gtag.js) - Google Analytics