取字符

来源:互联网 发布:浙江省高中网络选修课 编辑:程序博客网 时间:2024/05/23 19:29

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);}


0 0