ybt 1199字母全排列

全排列

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 151     通过数: 111 
【题目描述】
给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。
我们假设对于小写字母有‘a’ <‘b’ < ... <‘y’<‘z’,而且给定的字符串中的字母已经按照从小到大的顺序排列。

【输入】
只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。
【输出】
输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义:
已知S = s1s2...sk,T = t1t2...tk,则S<T等价于,存在p(1<=p<=k),使得s1=t1,s2=t2,...,sp-1=tp-1, sp<tp成立。

【输入样例】
abc
【输出样例】
abc
acb
bac
bca
cab
cba
【来源】

No
#include<iostream>#include<cstdio>
#include<cstring>
using namespace std;
char b[10000][8];int k;
void pai(char a[],int index,int num,int lenth )
{
	if(num==1)
	{
		k++;
		for(int i=0;i<lenth;i++)
		{
			b[k][i]=a[i];
		} 
		 return;
	}
	for(int i=0;i<num;i++)
	{
		swap(a[index+i],a[index]);
		pai(a,index+1,num-1,lenth);
		swap(a[index],a[index+i]);
	}
	return;}int main(){
	char a[10];
	scanf("%s",a);
	int l=strlen(a);
	pai(a,0,l,l);
	for(int i=k;i>0;i--)
	{
		for(int j=0;j<i;j++)
		{
			if(strcmp(b[i],b[j])<0)
			swap(b[i],b[j]);
		}
	}
	for(int i=1;i<=k;i++)
	{
		puts(b[i]);
	}
 }
				
时间: 2024-08-13 21:36:29

ybt 1199字母全排列的相关文章

【字母全排列】 poj 1256

深搜   注意与STL模版的去重函数唯一的区别就是有去重. #include <iostream> #include <cstdio> #include <string.h> #include <algorithm> using namespace std; int len; char ch[15],ss[15]; int visted[15]; bool cmp(char a,char b) { double t1=a,t2=b; if(a>='A'

WLLCM这五个字母全排列数目

       经过训练的话一眼看出来是5!/2!:我想的是先排WLCM那么是4!,5个位置,由于L左右两边的位置其实是一样的(再插入的还是L),索以结果是4*4!,这样重复了,看下图.                   

字符串或者数字数组全排列

//字符串全排列package com.demo.acm; public class AllSortChar { public static void allSort(char[] buf,int start,int end){ if(start==end){ for(int i=0;i<=end;i++){ System.out.print(buf[i]); } System.out.println(); }else{ //多个字母全排列 for(int i=start;i<=end;i++

Java 全排列

package algorithm; public class SortAll { public static void main(String[] args) { char buf[] = {'1','2','3','4','5'}; perm(buf,0,buf.length-1); } private static void perm(char[] buf, int start, int end) { if(start==end){//当只要求对数组中一个字母进行全排列时,只要就按该数组输

Java实现字符数组全排列

import org.junit.Test; public class AllSort { public void permutation(char[] buf, int start, int end) { if (start == end) {// 当只要求对数组中一个字母进行全排列时,只要就按该数组输出即可 for (int i = 0; i <= end; i++) { System.out.print(buf[i]); } System.out.println(); } else {//

全排列的几种算法

全排列,我们高中时就学过,数学上很简单,可是用计算机的算法实现还是有点味道的, 今天我将我碰到的几种算法如数奉上,欢迎交流! 第一种:递归 最常见的也是最好理解的方法: 简单点:比如"a" ,"b","c"全排列,可以看做事"a" +"b","c"的全排列 及"b"+ "a","c"的全排列 及"c" +  

poj分类解题报告索引

图论 图论解题报告索引 DFS poj1321 - 棋盘问题 poj1416 - Shredding Company poj2676 - Sudoku poj2488 - A Knight's Journey poj1724 - ROADS(邻接表+DFS) BFS poj3278 - Catch That Cow(空间BFS) poj2251 - Dungeon Master(空间BFS) poj3414 - Pots poj1915 - Knight Moves poj3126 - Prim

蓝桥杯java历年真题及答案整理41~56

41. 低碳生活大奖赛 /* 某电视台举办了低碳生活大奖赛.题目的计分规则相当奇怪: 每位选手需要回答10个问题(其编号为1到10),越后面越有难度. 答对的,当前分数翻倍:答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理). 每位选手都有一个起步的分数为10分. 某获胜选手最终得分刚好是100分,如果不让你看比赛过程, 你能推断出他(她)哪个题目答对了,哪个题目答错了吗? 如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示. 例如:001011

POJ 1731 Orders(带重复字母的全排列 + 暴力)

POJ 1731 Orders Description The stores manager has sorted all kinds of goods in an alphabetical order of their labels. All the kinds having labels starting with the same letter are stored in the same warehouse (i.e. in the same building) labelled wit