Q:
从标准输入读入一个由字母构成的串(不大于30个字符)。
从该串中取出3个不重复的字符,求所有的取法。
取出的字符,要求按字母升序排列成一个串。
不同的取法输出顺序可以不考虑。
例如:
输入:
abc
则输出:
abc
输入:
abcd
则输出:
abc
abd
acd
bcd
输入:
abcaa
则输出:
abc
A:
>>输入,一个字符只记载一次(alpha[26])
>>因为只要取三个字符,就直接来了三重循环,结果上看是ok的。但应该还有更高效的解法
#include "stdio.h"
#include "windows.h"
#include <string.h>
char str[31]="0",count[27]="0";
int alpha[26]={0};
int main (void)
{
while(scanf("%s",str))
{
int i,j,k,check=1,t=0;
int m=strlen(str);
for(i=0; i<m; i++)
{
if(str[i]>=97 && str[i]<=122)
{ if(!alpha[str[i]-97])
alpha[str[i]-97]=1; }
else if(str[i]>=65 &&str[i]<=90)
{ if(!alpha[str[i]-65])
alpha[str[i]-65]=1; }
else
{ check=0; }
}
if(check=0) continue;
for(i=0; i<26; i++)
if(alpha[i])
{ count[t]=97+i; t++;}
for(i=0; i<t-2; i++)
for(j=i+1; j<t-1; j++)
for(k=j+1; k<t; k++)
printf("%c%c%c\n",count[i],count[j],count[k]);
memset(alpha, 0, sizeof(alpha));
memset(count, 0, sizeof(count));
}
system("pause");
return (0);
}