今晚做了华为的机试,3道ACM题,最后一道是实现从M个不同字符中任取N个字符的所有组合。

eg: input:ABC 2

output:AB AC BC

第一个输入为字符串,第二个输入为组合的字符个数,当N=0或者N>M时,输出“ERROR”。

思路:可以用递归的算法解决,例如ABC中2个字符的所有组合,先选取第一个的A,那包含A的2个字符的所有组合就是从后面剩余的BC中取1个字符的所有组合,然后选取第二个的B,那包含B的2个字符的所有组合就是从后面剩余的C中取1个字符的组合,即只有C,到选取第三个的C时,后面已经没有字符了,不足以组成2个字符的组合。以此类推,将从M个不同字符中任取N个字符的所有组合递归成从M-1个不同字符任选N-1个字符的所有组合(包含“A”)加上从M-1个个不同字符任选N个字符的所有组合(不包含“A”)。

import java.util.*;
public class Main {
public static void main(String args[]){
Scanner cin = new Scanner(System.in);
String str = cin.next();
int maxCount = cin.nextInt();
char[] chs = str.toCharArray();
if(maxCount==0 ||maxCount>str.length()){
System.out.print("ERROR");
}
combination(chs, 0, 0, maxCount, "");
}
/*
* @param chs 输入的字符数组
* @param index 选取的字符所在的数组索引值
* @param count 已经选取字符的个数
* @param maxCount 输入的要选取字符的个数
* @param result 已经选取的字符组合
*
*/
public static void combination(char[] chs, int index, int count, int maxCount, String result) {
if (count == maxCount) {
System.out.print(result+" ");
return;
}
for (int i = index; i < chs.length; ++i) {
combination(chs, i + 1, count + 1, maxCount, result + chs[i]);
}
}
}

  

华为机试ACM(字符组合问题)的更多相关文章

  1. 2014华为机试西安地区B组试题

    2014华为机试西安地区B组试题 题目一.亮着点灯的盏数 一条长廊里依次装有n(1≤n≤65535)盏电灯,从头到尾编号1.2.3.-n-1.n.每盏电灯由一个拉线开关控制.開始,电灯所有关着. 有n ...

  2. 华为机试001:字符串最后一个单词的长度(华为OJ001)

    华为机试 字符串最后一个单词的长度 计算字符串最后一个单词的长度,单词以空格隔开. 提交网址: http://www.nowcoder.com/practice/8c949ea5f36f422594b ...

  3. 2014华为机试西安地区A组试题

    2014华为机试西安地区A组试题 题目一.分苹果 M个同样苹果放到N个同样篮子里有多少种放法,同意有篮子不放. 1<=M<=10.1<=N<=10 比如5个苹果三个篮子,3,1 ...

  4. 输入一个字符串,去掉重复的字符,并按ASCII值排序-华为机试

    import java.util.Scanner; //输入字符串,去掉重复的字符,并按ASSIC码值排序 public class quChong { public static void main ...

  5. 华为机试正式版(西安c/c++/java),今天下午去机试的题目,新奇出炉了!

    下面题目都是回顾的.题目都非常easy, 大家有些基础就能够參加!(语言能够是c/c++.也能够是java的) 题目一(60分): 字符串操作. 将小写转换成大写, 将大写转化为小写, 数字的不做转换 ...

  6. 华为机试_字符串识别_Vector的使用;

    第一题:拼音转数字输入是一个只包含拼音的字符串,请输出对应的数字序列.转换关系如下:描述:      拼音        yi  er  san  si  wu  liu  qi  ba  jiu  ...

  7. 华为机试 之 joseph环

    一:首先科普一下约瑟夫问题的数学方法 (1)  不管是用list实现还是用vector实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比較烦,并且时间复杂度高达O(nm),当n,m很大(比如上百 ...

  8. 【华为机试】找最高分(通过此题熟悉牛客网Node输入输出)

    来源:牛客网 老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问.当然,老师有时候需要更新某位同学的成绩. 输入描述: 输入包括多组测试数据.每组输入第一行是两个正整数N和M(0 ...

  9. (华为机试大备战)java。多了解了解最常用的那个类库的方法对处理字符串的方法

    1.常考字符串处理:对处理字符串的方法. (a)统计字符串中特定字符的个数. 2.郭靖考了一道二维数组?? 3.多了解了解最常用的那个类库的方法.

随机推荐

  1. passwd(总结)

    1.当前用户是root root用户修改密码 ,直接 passwd[不要输入当前用户密码] 如果修改其他用户密码,需要 passwd 用户名 如: passwd sc 短短的密码,如123也能通过,因 ...

  2. Java GUI编程SwingUtilities.invokeLater作用

    1 http://blog.micxp.com/index.php/archives/109/ 2

  3. Android 开发 Eclipse使用SVN

    1 help--->install new software--->add 2 name自定义 location填入内容见3 3 http://subclipse.tigris.org/s ...

  4. 工作总结 获取html 标签 自定义属性值 根据html 自定义属性 获取 到标签

    FFID    HFID function getElementByAttr(tag, attr, value) { var aElements = document.getElementsByTag ...

  5. Hibernate二次学习一----------Hibernate简单搭建

    因为博客园自带的markdown不太好用,因此所有markdown笔记都使用cmd_markdown发布 Hibernate二次学习一----------Hibernate简单搭建: https:// ...

  6. source sh运行脚本的差别

    主要有两种方式运行shell脚本 1)source test.bsh 2)sh test.bsh 1)souce运行脚本文件会在父程序中运行.各项动作都会在原本的bash内生效.运行过程不另开进程.脚 ...

  7. Linux的IO栈

  8. HBase中我认为比较常用的两个类:Scan和Filter

    学习HBase一段时间后,我认为HBase中比较常用,同时也是必须掌握的两个API是Scan和Filter.如下是我的理解: 1.Scan  ---- 扫描类 作用:用来对一个指定Table进行按行扫 ...

  9. linux下的Java开发 intellij idea+tomcat+maven

    前期准备:安装intellij idea.下载tomcat.下载maven(注意我用的是tomcat6.maven 3.2.1.jdk1.6.0_45,之前maven用的3.5结果报错,搞了好久,建议 ...

  10. CSMA/CD解释与理解

    1. CSMA/CD含义 CSMA/CD即载波监听多点接入/碰撞检测,此协议是使用在总线型网络中的,不同计算机是通过多点接入的方式连接在一起.协议的重点在于监听和碰撞检测. 2. 为什么要监听和碰撞检 ...