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();
}
相关文章
|
17天前
|
算法
现有‘abcdefghijkl’12个字符,将其所有的排列按字典序进行排序,给出任意一组排列,说出这租排列在所有排列中是第几小的
现有‘abcdefghijkl’12个字符,将其所有的排列按字典序进行排序,给出任意一组排列,说出这租排列在所有排列中是第几小的
8 1
|
2月前
|
算法 C++
Acwing.51 数字排列(全排列)
Acwing.51 数字排列(全排列)
|
10月前
逆序一个字符串的每一组单词(不是倒叙)
整体思路: 1.先将整个字符串倒叙:i like china.->.anihc ekil i 2.将倒叙后的每一块单词再倒叙:.anihc->china. 想必大家都发现了,倒叙整个字符串和倒叙每一块是一样的,那么我们不妨写一个倒叙的函数在这里用reserve表示!
49 0
|
11月前
从排列字符串到排列序列:解析增减字符串匹配问题
题目要求根据给定的字符串 s,构造一个排列序列 perm,其中排列序列中的数字满足以下规则: 如果 perm[i] < perm[i + 1],则对应的字符为 'I'; 如果 perm[i] > perm[i + 1],则对应的字符为 'D'。 我们需要根据字符串 s 中的字符,构造满足上述规则的排列序列 perm。
44 0
LeetCode 567. 字符串的排列
LeetCode 567. 字符串的排列
72 0
LeetCode 567. 字符串的排列
在一个由小写英文字母(a-z)组成的字符串中,查找最长子串,其头尾字母相同,且中间不包含该头尾字母,并输出最左边的该类子串
在一个由小写英文字母(a-z)组成的字符串中,查找最长子串,其头尾字母相同,且中间不包含该头尾字母,并输出最左边的该类子串
142 0
在一个由小写英文字母(a-z)组成的字符串中,查找最短子串,其头尾字母相同。输出最左边的该类子串。
在一个由小写英文字母(a-z)组成的字符串中,查找最短子串,其头尾字母相同。输出最左边的该类子串。
55 0
leetcode 字符串的排列
给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。