串中取3个不重复字母

串中取3个不重复字母

时间: 1ms        内存:128M

描述:

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

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

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

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

输入:

例如:
输入:
abc

输出:

则输出:
abc

示例输入:

abcd

示例输出:

abc
abd
acd
bcd

提示:

参考答案(内存最优[752]):

#include<stdio.h>
void oder(char a[])
{
	int i,j;
	char t;
	for(i=0;a[i]!='\0';i++)
		for(j=i+1;a[j]!='\0';j++)
		{
			if(a[i]>a[j])
			{
				t=a[j];
				a[j]=a[i];
				a[i]=t;
			}
		}
}
int main()
{
	int i,j,k;
	char a[31],b[4];
	gets(a);
	for(i=0;a[i]!='\0';i++)
	{
		b[0]=a[i];
		for(j=i+1;a[j]!='\0';j++)
		{
			b[1]=a[j];
			for(k=j+1;a[k]!='\0';k++)
			{
				b[2]=a[k];
				b[3]='\0';
				oder(b);
				if(b[0]!=b[1]&&b[0]!=b[2]&&b[1]!=b[2])
					puts(b);				
			}
		}
	}
	return 0;
}

参考答案(时间最优[0]):

#include <iostream>
using namespace std;
#include <string.h>
#include <algorithm>
char a[3];

int main()
{
    string s;
    cin>>s;
    for(int i=0;i<s.length()-2;i++)
    {
        a[0]=s[i];
        for(int j=i+1;j<s.length();j++)
            for(int k=j+1;k<s.length();k++)
        {
            a[1]=s[j];
            a[2]=s[k];
        sort(a,a+3);
        cout<<a[0]<<a[1]<<a[2]<<endl;
        }
    }
    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注