蓝桥杯 -- 取字母

从键盘读入一个由字母构成的串(不大于30个字符)。
 
从该串中取出3个不重复的字符,求所有的取法。
 
取出的字符,要求按字母升序排列成一个串。
 
不同的取法输出顺序可以不考虑。
 
例如:
输入:
abc
则输出:
abc
 
输入:
abcd
则输出:
abc
abd
acd
bcd
 
输入:
abcaa
则输出:
abc
 
要求考生把所有类写在一个文件中。
调试好后,存入与考生文件夹下对应题号的“解答.txt”中即可。
相关的工程文件不要拷入。请不要使用package语句。
另外,源程序中只能出现JDK1.5中允许的语法或调用。不能使用1.6或更高版本。
 
解题思路: 先将相同的字母去重,然后跑一边三重循环将所有情况输出。
 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <algorithm>
 4 
 5 using namespace std;
 6 
 7 int main ()
 8 {
 9     char s1[40],s2[40];
10     int i,j,i1,i2,i3;
11     while (gets(s1)!=NULL)
12     {
13         int len = strlen(s1);
14         sort(s1,s1+len);      // 从小到大排序 
15         s2[0] = s1[0]; j = 1;
16         for (i = 1; i < len; i ++)   // 去掉相同的字母 
17             if (s1[i] != s1[i-1])
18                 s2[j ++] = s1[i];
19         
20         s2[j] = 0;
21         for (i1 = 0; i1 < j-2; i1 ++)     // 三重循环 模拟取字母的过程 
22          for (i2 = i1+1; i2 < j-1; i2 ++)
23           for (i3 = i2+1; i3 < j; i3 ++)
24                 printf("%c%c%c\n",s2[i1],s2[i2],s2[i3]);
25     }
26     return 0;
27 }

 

posted @ 2017-04-08 17:41  gaoyanliang  阅读(327)  评论(0编辑  收藏  举报