取字符

来源:互联网 发布:美国缩表中国楼市知乎 编辑:程序博客网 时间:2024/05/24 07:14

题目来源:http://acm.hdu.edu.cn/diy/contest_showproblem.php?pid=1003&cid=31654&problem=Problem%20%20C

解法或类型

Description

从标准输入读入一个由字符构成的串(不大于30个字符)。

从该串中取出3个不重复的字符,求所有的取法。

取出的字符,要求按字符升序排列成一个串。

不同的取法输出顺序可以不考虑

Input

从标准输入读入一个由字符构成的串(不大于30个字符)。  

Output

从该串中取出3个不重复的字符,求所有的取法。   

Sample Input

abc

abcaa

abcd

Sample Output

abc

abc

abc

abd

acd

bcd

题意描述
      给一组字母,抽出3个字母,从大到小排序,分别输出所有可能。
解题思路
    先把重复的字母去掉,然后从小到大排序,最后用一个三层循环,第一层控制第一个字母,第二层控制第二个字母,第三层控制第三个字母。
 
时空分析: 

  

程序代码:

#include<stdio.h>

#include<string.h>

int main()

{

    char str[100],str2[100],c;

    int i,y,t,j,l,k;

   

    while(gets(str))

    {

       memset(str2,0,sizeof(str2));

       y=0;

       for(i=0;str[i]!='\0';i++)

       {

          

           t=0;

           for(j=i+1;str[j]!='\0';j++)

           {

          

              if(str[i]==str[j])

              str[j]=' ';

              t++;

           }

           //printf("%d\n",t);

           if(str[i]!=' ')

           {

              str2[y]=str[i];

              y++;

           }

       }

       //printf("%d\n",y);

       //puts(str2);

       for(i=0;str2[i]!='\0';i++)

       {

           for(j=0;str2[j]!='\0';j++)

           {

              if(str2[i]<str2[j])

              {

                  c=str2[i];

                  str2[i]=str2[j];

                  str2[j]=c;

                 

              }  

           }     

       }

       //puts(str2);

       l=strlen(str2);

       //printf("%d\n",l);

       for(i=0;i<l-2;i++)

       {

           for(j=i+1;j<l-1;j++)

           {

              for(k=j+1;k<l;k++)

              {

                  printf("%c",str2[i]);

                  printf("%c",str2[j]);

                  printf("%c",str2[k]);

                  printf("\n");

              }

              //printf("\n");  

           }

           //printf("\n");

       }

    }

   

      return 0;

}错误分析:

 1、所有输出没有严格按照题目要求输出。

2、

3、

0 0
原创粉丝点击