UVa 10098 快速生成有序排列

题意:对输入的字符串,按字典序升序输出所有种排列。

思路:这个基础就是之前将到的枚举排列问题,只不过当时是整型,这里是字符型。

注意:一个是输出的时候每组数组后都要输出一个空行(虽然你去复制sample out会发现最后一组数据没空行,但程序里的确是包括最后一组数据后都有空行)

第二是因为这里是字符型,输出的时候直接按字符串输出即可,但是需要在排列数组的最末位加‘\0‘!还有,在最开始需要对字符串排序一下。

Code:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void print_permutation(int n,char *str,char *A,int cur);
int cmp_char(const void *_a, const void *_b);

char str[15];
char A[15];

int main()
{
  int n;
  scanf("%d",&n);
  while(n-->0)
  {
    scanf("%s",str);
    qsort(str,strlen(str),sizeof(str[0]),cmp_char);
    print_permutation(strlen(str),str,A,0);
    printf("\n");
  }
  return 0;
}

int cmp_char(const void *_a, const void *_b)
{
  return *(char*)_a - *(char*)_b;
}

void print_permutation(int n,char *str,char *A,int cur)
{
  if(cur==n)
  {
    A[cur]='\0';
    printf("%s\n",A);
  }
  else
  for(int i=0;i<n;++i)
    if(!i||str[i]!=str[i-1])
    {
      int c1=0,c2=0;
      for(int j=0;j<cur;++j) if(str[i]==A[j]) c1++;
      for(int j=0;j<n;++j) if(str[i]==str[j]) c2++;
      if(c1<c2)
      {
        A[cur]=str[i];
        print_permutation(n,str,A,cur+1);
      }
    }
}
时间: 2024-11-05 23:34:43

UVa 10098 快速生成有序排列的相关文章

如何快速生成视觉需求?

不少产品经理认为画视觉稿是视觉设计师的事情,所以偷懒也不整理视觉需求给到对方,最后验收发现缺少部分视觉稿,或者画出的视觉稿和PM要求的差异很大.介绍我自己研究出来的快速交付视觉需求的方法论,绝对值得学一学. 只有当PM将所有的视觉需求一一交付给视觉设计师,才能保证视觉设计师全面了解PM的设计思想,以及不会漏做相应的线框图. 一.需要交付的内容 刚入门的PM可能简单的把所有原型一股脑丢给视觉设计师,可能连当前版本还是所有版本都不区分.也不会区分线框图和交互图.视觉设计师只能自己琢磨,以及主动来问你

Logo图标快速生成软件(Sothink Logo Maker) v3.5 官方设计师版

Logo图标快速生成软件(Sothink Logo Maker) v3.5 官方设计师版 下载地址:http://www.cr173.com/soft/10238.html 硕思logo设计师怎么把背景logo去掉? http://jingyan.baidu.com/article/c275f6bac03b22e33c75674b.html 1.制作好LOGO之后,首先导出SVG文件,而不是直接导出图片,保存好. 2.利用浏览器打开存好的SVG文件. 3.右键保存为png或者bmp位图文件. 4

[转]Oracle dbms_random函数用法快速生成多条测试数据

做数据库开发或管理的人经常要创建大量的测试数据,动不动就需要上万条,如果一条一条的录入,那会浪费大量的时间,本文介绍了Oracle中如何通过一条SQL快速生成大量的测试数据的方法. 首先模拟一下100条的随机数据 [sql] view plaincopyprint? select rownum as id, to_char(sysdate + rownum / 24 / 3600, 'yyyy-mm-dd hh24:mi:ss') as inc_datetime, trunc(dbms_rand

T4模板:MVC中用T4模板快速生成代码

T4模板快速生成代码: 以快速生Dal文件为例,下面为T4模板文件的内容 <#@ template debug="false" hostspecific="true" language="C#" #> <#@ include file="EF.Utility.CS.ttinclude"#> <#@ output extension=".cs" #> <# CodeG

Myeclipse插件快速生成ssh项目并配置注解 在action层注入service的超详细过程

最近发现,我对于ssh的 自动注入配置 还是不熟悉,于是整理了一下 终于做了一个 简单的 注入配置出来. 以前都是在applicationContext.xml 里面这样配 <bean id="loginAction" class="com.dj.ssh.action.LoginAction" scope="prototype" autowire="byName"> <property name="

转:eclipse技巧之快速生成Override函数

转自: http://www.cnblogs.com/junqilian/archive/2013/03/15/2960277.html 小提示:Eclipse 中快速实现或Override基类或接口中的方法 刚刚用Eclipse好多操作还不熟悉,不过Eclipse IDE是以强大的代码编辑和重构能力而闻名的,从Visual Studio的使用经验来看,一定是可以自动生成接口中方法签名的.比如下面的代码: public class Magpie extends Activity implemen

快速生成plist文件

在一个项目中,我们会经常用到许多plist文件,但是你怎么快速生成plist 文件吗?我给你提供一个方法. NSArray *title = [[NSArray alloc]initWithObjects:@"限免",@"降价",@"免费",@"专题",@"热榜", nil]; NSArray *iconName= [[NSArray alloc] initWithObjects:@"tabbar

VS2010快速生成代码模板功能介绍

一只程序猿的生产效率很重要.生成效率高了,老板喜欢你,妹子崇拜你,你也可以给自己节省很多时间. 加班的一般都是新手程序猿,除了对语言和技术不熟悉,工具也是很影响生成效率的因素.我们知道,猿和其他动物最大的区别在于,猿会使用工具.所以这一系列我将介绍一下如何用好手头的工具来帮助我们提高效率. 今天我们来看看如何在Visual Studio 2010中用内置的模板快速生成代码片段. 代码模板就是预先定义好的一个代码片段.VS中,我们只要输入模板的名称,然后连按两下TAB,VS就可以给我们把代码片段补

Python中如何快速生成注释文档?

今天将告诉大家一个简单平时只要注意的python开发小细节,就可以轻松生成注释文档,也可以检查我们写的类方法引用名称是否重复有问题等.一看别人专业的大牛们写的文档多牛多羡慕,不用担心我们可以让python为我们生成基本满足的说明文档,一来可以提高代码整体阅读性,二来可以将代码的整体结构看着也更清晰,这样在交接的时候可以省很多麻烦,其它同事在接手你工作的时候也不会一行行去问你这是什么那是什么的,因为注释已经很直观的表述了,在整合的时候可当说明文档给客户简单说明(主要是给你BOSS看的),那么进入正