从标准输入读入一个由字母构成的串(不大于30个字符)。从该串中取出3个不重复的字符,求所有的取法。取出的字符,要求按字母升序排列成一个串。不同的取法输出顺序可以不考虑。
分析难点:
1.输入的字符可能存在重复,乱序。
2.有多少种排列方式应该怎么找?如何找全?
3.题目要求是升序排列
解题思路:
1.先将输入的字符串处理,删除重复的字符,按照顺序排列。
2.利用循环输出各个排序结果。
#include<stdio.h>
#include<string.h>
int main(){
char str[80],str2[80], temp;
int i, j, len,len1, minPos,a=0,b,c,d;
gets(str);
len = strlen(str);
for(i=0; i<len; i++){
minPos = i;
for(j=i+1; j<len; j++){
if(str[j]<str[minPos]){
minPos = j;
}
}
if(minPos!=i){
temp = str[i];
str[i] = str[minPos];
str[minPos] = temp;
}
}//到这里之前的部分将输入得到的字符串进行排序
for(i=0; i<len; i++){
if(str[i]!=str[i-1]){
str2[a]=str[i];
a++;
}
}//用str2来复制字符串中不重复的字符,得到按照顺序排好并且不重复的字符串
str2[a+1]=='\n';
len1 = strlen(str2);
for(b=0;b<len1;b++){//从第一个字符开始,放在第一位
for(c=1;c<len1;c++){//由于题目要求升序排序,第二位的最小字符是第二个字符
for(d=2;d<len1;d++){//同理第三位不能小于前两位字符。
if(b!=c&&b!=d&&c!=d)//当三个位置上的字符都不同时,输出结果
printf("%c%c%c\n",str2[b],str2[c],str2[d]);
}
}
}
return 0;
}