`
1140566087
  • 浏览: 559105 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
博客专栏
2c4ae07c-10c2-3bb0-a106-d91fe0a10f37
c/c++ 入门笔记
浏览量:18523
3161ba8d-c410-3ef9-871c-3e48524c5263
Android 学习笔记
浏览量:314089
Group-logo
J2ME 基础学习课程集
浏览量:18737
A98a97d4-eb03-3faf-af96-c7c28f709feb
Spring 学习过程记录...
浏览量:17581
社区版块
存档分类
最新评论

使用二进制替代解决全排列问题

阅读更多
//从键盘读入一个由字母构成的串(不大于30个字符)。
//
//从该串中取出3个不重复的字符,求所有的取法。
//
//取出的字符,要求按字母升序排列成一个串。
//
//不同的取法输出顺序可以不考虑。
//
//例如:
//输入:
//abc
//则输出:
//abc
//
//输入:
//abcd
//则输出:
//abc
//abd
//acd
//bcd
//
//输入:
//abcaa
//则输出:
//abc

/*
* 首先去掉用户输入的重复的 , 然后就是对剩下的字符进行排列
*
* */


package 高职2011决赛真题;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Scanner;

public class Title3 {

	public static void main(String[] args){
		Scanner input = new Scanner(System.in);
		String a = input.nextLine();

		/*  获取新得到的字符  */
		String newX = repair(a);

		/* 对剩下的字符进行排列 */
		range(newX);
		
		/* 进行数据显示 */
		print(newX, range(newX));
	}

	/*  去掉重复的   */
	public static String repair(String a){
		String x = "";

		for(int i=0;i<a.length();i++){
			String temp = String.valueOf(a.charAt(i));

			if(!x.contains(temp)){
				x = x+temp;
			}
		}

		return x;
	}

	/* 对字符串进行取字符 , range */
	public static ArrayList<String> range(String x){
		//	a	d	b	c	s	e
		//	1	1	1	0	0	0
		//	1	1	1	1	1	1
		//  1 0 表示提取与不提取,

		ArrayList<String> list = new ArrayList<String>();
		for(int i=0;i<=Math.pow(2, x.length());i++){
			BigInteger a = BigInteger.valueOf((long)i);

			String newX = a.toString(2);

			int count = 0;
			for(int j=0;j<newX.length();j++){
				if(newX.charAt(j) == '1'){
					count++;
				}
			}

			/*  不满足三个值的时候结束本次循环  */
			if(count==3){
				
				if(newX.length()!=x.length()){
					for(;;){
						if(newX.length()==x.length()){
							break;
						}
						newX="0"+newX;
					}
				}

				/* 保存符合条件的   */
				if(!list.contains(newX)){
					list.add(newX);
				}				
			}
		}
		return list;
	}

	/* 打印输出进行显示  */
	public static void print(String x,ArrayList<String> list){
		
		// 保存为字节数组
		char[] arr = x.toCharArray();
		
		for(int i=0;i<list.size();i++){
			String temp = list.get(i);
			
			String result = "";
			for(int k=0;k<temp.length();k++){
				if(temp.charAt(k)=='1'){
					//K 的下标对应了
					result+=arr[k];
				}
			}
			System.out.println(result);
		}
	}
}
0
1
分享到:
评论

相关推荐

    BES二进制文件编辑器

    通过这个工具,他们可以修改文件的底层结构,解决某些特定问题或进行调试工作。 2. **查看二进制内容**: BES编辑器提供了查看二进制文件内容的功能。用户不仅可以看到0和1的数据流,还可以选择以十六进制(Hex)...

    10进制转其他进制(全排列,2进制为例)

    可以转换各种进制的数据。 这是很多年前碰到的一个题目的另类解法,列出X位内所有的2进制数。

    解决SU二进制文件过旧的问题

    "解决SU二进制文件过旧的问题"这个标题表明我们需要讨论的是如何更新或修复已经过时的SU二进制文件,以确保系统的安全性和功能的完整性。以下是一些关于这个问题的详细知识: 1. **SU二进制文件的作用**:SU是...

    二进制部署k8s高可用集群(二进制-V1.20).docx

    二进制方式是使用二进制文件来部署 K8s 集群,而容器方式是使用容器来部署 K8s 集群。二进制方式相对简单,但需要手动配置每个组件,而容器方式可以自动化配置,但需要较高的资源占用。 2. 准备环境 在部署 K8s ...

    bes二进制查看工具

    "besnew二进制查看工具"是一款专门设计用于查看和分析二进制数据的专业软件。在IT领域,理解和处理二进制数据是至关重要的,因为计算机底层的数据存储和传输都...用户可以借助它深入理解二进制数据,解决各种复杂问题。

    使用二进制排除不符合条件n位数

    "使用二进制排除不符合条件n位数"这个标题暗示了一种利用二进制表示和操作来解决特定问题的方法,这里的问题是"7选6的组合重复情况"。描述中的“另一种思路”指的是通过二进制技巧来避免传统方法可能遇到的重复。 ...

    十进制转二进制的方法

    十进制转二进制的算法是许多初学者头疼的问题,但实际上这是一种简单的除法算法。具体来说,就是用 2 辗转相除至结果为 1,然后将余数和最后的 1 从下向上倒序写出来,就是结果。例如,要将 405 转换成二进制的数,...

    010editor 二进制编辑器,很好用

    与仅显示文件的原始十六进制字节(1)的传统十六进制编辑器不同,010 Editor还可以使用二进制模板(2)将文件解析为分层结构。运行二进制模板的结果比仅使用原始十六进制字节更容易理解和编辑。 二进制模板易于编写...

    浮点数二进制互转小工具

    浮点数的表示方式是基于二进制的,但为了方便人类阅读和理解,通常我们使用十进制形式。浮点数与二进制之间的转换是理解和优化计算机程序的关键环节。 标题"浮点数二进制互转小工具"指的是一个专门用于处理浮点数与...

    不错的文件二进制查看工具

    总的来说,选择一个高效、轻便且无侵入性的二进制查看工具对于IT专业人士来说是非常有益的,它能够帮助他们深入理解二进制数据,从而解决复杂的技术问题。而标题和描述中提到的工具正好符合这些需求,值得尝试和使用...

    二进制查看工具 Binary Viewer 解压使用

    使用 Binary Viewer 进行二进制文件分析时,用户需要具备一定的计算机基础知识,包括但不限于计算机架构、数据表示、文件格式和编程语言。通过这个工具,用户可以深入探究文件的内部工作原理,解决各种技术问题,...

    1.二进制字符串转十进制数值_labview_二进制转十进制_

    二进制(Binary)是一种基于2的数制系统,只使用0和1两个数字。而我们日常生活中使用的十进制(Decimal)则是基于10的数制系统,包含0到9十个数字。在二进制中,每一位的权重都是2的幂次,例如最右边的一位是2^0,第...

    16进制转换成二进制

    16进制是一种基于16的数制系统,它使用0到9的数字以及A到F(代表10到15)来表示数值,而二进制则基于2的数制系统,只使用0和1。了解这两种进制之间的转换对于理解计算机内部的工作原理至关重要,因为计算机底层数据...

    二进制查看工具

    二进制查看工具是计算机领域中用于分析...无论是调试程序、解析日志、检查硬盘错误,还是分析恶意软件,二进制查看工具都起着不可替代的作用。掌握如何有效利用这些工具,对于提升技术能力、解决实际问题具有重要意义。

    查看二进制文件的常用软件

    虽然替换功能在二进制文件中通常较少使用,但在某些特定情况下,如修改特定字节,这功能也能派上用场。 4. **书签和多文档接口**:对于大型二进制文件,EditPlus的书签功能可以帮助用户标记重要的位置,方便后续...

    二进制文件分析工具(用于分析二进制的exe文件)

    使用FlexHEX或其他二进制分析工具时,关键知识点包括: 1. **十六进制表示法**:理解二进制数据在十六进制表示下如何呈现,因为这是大多数二进制编辑器显示数据的方式。 2. **文件结构分析**:识别.exe文件的结构,...

    易语言字节集到二进制互转

    对于每个字节,使用内置的二进制转换函数(如`转换二进制字节`)将其转换为二进制字符串,然后连接这些字符串形成最终的二进制数据。 2. **二进制转字节集**:首先,将二进制字符串分割成单个的二进制位,然后将...

    二进制转十进制和十进制转二进制

    掌握这些进制转换技能对于理解和解决计算机科学问题至关重要,无论是硬件设计、软件开发还是数据分析。了解这些基础,可以帮助我们更好地理解计算机的工作原理,并有效地进行数据处理和计算。在实际应用中,如文件...

    Binary Viewer二进制文件读取软件

    通过使用Binary Viewer这样的二进制文件读取工具,无论是开发人员、逆向工程师还是安全研究人员,都能深入地洞察二进制文件的内容,从而更好地理解和处理这些数据。掌握如何有效使用这类工具是IT专业人士必备的技能...

    易语言置入汇编实现二进制十进制互转

    本文将深入探讨如何使用易语言结合汇编来实现二进制和十进制之间的互换。易语言是中国本土开发的一种高级编程语言,它以其易于理解和使用的特性而闻名。而汇编语言则是一种低级编程语言,直接对应计算机的指令集,对...

Global site tag (gtag.js) - Google Analytics