030.字符排列

简介: 030.字符排列
/* 字符串的所有字符排列函数,用已知字符串s中的所有字符,生成由其中n个字符组成的所有字符排列 */
#define N 20
char w[N];
perm(int n, char *s)
{
  char s1[N];
  int i;
  if(n<1)
    printf("%s\n",w); /* 一个排列生成输出 */
  else
  {
    strcpy(s1,s); /* 保存本层次可使用的字符 */
    for(i=0;*(s1+i);i++)  /* 依次选本层次可用字符 */
    {
      *(w+n-1)=*(s1+i);/* 将选用字符填入正在生成的字符排列中 */
      *(s1+i)=*s1;
      *s1=*(w+n-1);
      perm(n-1,s1+1);  /* 递归 */
    }
  }
}
main()
{
  int n=2;
  char s[N];
  w[n]='\0';
  clrscr();
  printf("This is a char permutation program!\nPlease input a string:\n");
  scanf("%s",s);
  puts("\nPlease input the char number of permuted:\n");
  scanf("%d",&n);
  puts("The permuted chars are:\n");
  perm(n,s);
  puts("\nPress any key to quit...");
  getch();
}
相关文章
|
索引
【LeetCode】917. 仅仅反转字母、387. 字符串中的第一个唯一字符
目录 917. 仅仅反转字母 387. 字符串中的第一个唯一字符
59 0
|
5月前
|
存储 算法 索引
给定一个只由左括号和右括号的字符串,返回最长的有效括号子串的长度。如何解答呢?
给定一个只由左括号和右括号的字符串,返回最长的有效括号子串的长度。如何解答呢?
|
8月前
|
算法
现有‘abcdefghijkl’12个字符,将其所有的排列按字典序进行排序,给出任意一组排列,说出这租排列在所有排列中是第几小的
现有‘abcdefghijkl’12个字符,将其所有的排列按字典序进行排序,给出任意一组排列,说出这租排列在所有排列中是第几小的
74 1
|
9月前
|
算法 C++
Acwing.51 数字排列(全排列)
Acwing.51 数字排列(全排列)
|
9月前
|
Go C++ Java
C/C++每日一练(20230411) 排列序列、翻转字符串里的单词、能被13又能被20整除的四位正整数的和
C/C++每日一练(20230411) 排列序列、翻转字符串里的单词、能被13又能被20整除的四位正整数的和
72 0
C/C++每日一练(20230411) 排列序列、翻转字符串里的单词、能被13又能被20整除的四位正整数的和
|
9月前
|
算法
【剑指offer】-字符串的排列-26/67
【剑指offer】-字符串的排列-26/67
从排列字符串到排列序列:解析增减字符串匹配问题
题目要求根据给定的字符串 s,构造一个排列序列 perm,其中排列序列中的数字满足以下规则: 如果 perm[i] < perm[i + 1],则对应的字符为 'I'; 如果 perm[i] > perm[i + 1],则对应的字符为 'D'。 我们需要根据字符串 s 中的字符,构造满足上述规则的排列序列 perm。
74 0
剑指offer_字符串---字符串的排列
剑指offer_字符串---字符串的排列
74 0
LeetCode 567. 字符串的排列
LeetCode 567. 字符串的排列
105 0