【题解提供者】吴立强
解法一
思路
本题就是单纯的模拟,考验代码能力。
代码
#include<iostream>
#include<set>
using namespace std;
int main() {
/// set 容器,可以排序和去重
set<string> se;
/// string 容器,可以更方便的读入,可配合其它容器使用
string s;
/// 读到文件末尾为止(读到空格自动分割)
while(cin >> s) se.insert(s);
/// for 循环遍历容器的写法
for(string f: se) cout << f << ' ';
return 0;
}
也展示一下 C 语言的写法
#include<stdio.h>
char s[100][51];
int cmp(char a[], char b[]) { /// 同 strcmp 的功能
for(int i = 0; ; i ++) {
if(a[i] == b[i]) {
if(a[i] == '\0') break;
continue;
}
return a[i] - b[i];
}
return 0;
}
void cpy(char a[], char b[]) { /// 同 strcpy 的功能
int i = 0;
do {
a[i] = b[i];
i ++;
} while(b[i - 1] != '\0');
}
int main() {
int n = 0;
/// 读入数据到文件末尾
while(scanf("%s", s[n]) != EOF) n ++;
/// 冒泡排序,可以用 qsort 替代
for(int i = 1; i < n; i ++) {
for(int j = 0; j < n - i; j ++) {
if(cmp(s[j], s[j + 1]) > 0) {
char t[51];
cpy(t, s[j]);
cpy(s[j], s[j + 1]);
cpy(s[j + 1], t);
}
}
}
printf("%s", s[0]);
for(int i = 1; i < n; i ++)
if(cmp(s[i], s[i - 1]) != 0)
printf("\n%s", s[i]);
return 0;
}
算法分析
本算法的时间复杂度为输入字符的数量。