串中取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;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。