一道C语言编程题,哪位高手帮帮忙啊~~~

来源:百度知道 编辑:UC知道 时间:2024/06/04 02:48:41
编写一个生成字母的组合和排列的程序。
1)输入n个字母,和整数r (r<=n)
2)输出从这n个字母中取r个的形成所有排列
3) 输出从这n个字母中取r个的形成所有组合
输入: 程序正常运行后,屏幕上显示一个文字菜单,当用户选定操作项目所对应的序号时,根据应用程序的提示信息,从键盘上输入相应的数据。
输出:: 1) 应用程序正常运行后,要在屏幕上显示一个文字菜单
2) 要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等

全排列深度搜索算法
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int hash[27];
char word[201];
int n;
void dfs(int cur)
{ int i;
if(cur>=n)
{
printf("%s\n",word);
return ;
}

for(i=0;i<26;i++)
if(hash[i])
{
hash[i]--;
word[cur]=i+'a';
dfs(cur+1);
hash[i]++;
}
return ;
}
int main()
{
int i;
scanf("%s",word);
n=strlen(word);
memset(hash,0,sizeof(hash));
for(i=0;i<n;i++)
hash[word[i]-'a']++;
dfs(0);
return 0;
}

来源http://zhidao.baidu.com/question/93008479.html

关键是处理重复的数字(字母)。分太少