描述
"ACM"家里的辈分是按找字典序排序的,
"ACM"是家里辈分最小的还(谐音)子,
"MCA"是家里辈分最大的还(谐音)子。
给定一个小朋友的名字,请你按找字典序从辈分最小的还(谐音)子开始,把这个小朋友家里全部的还(谐音)子的名字都输出.
输入
一个由英文字母组成的字符串,长度不超过10。
输出
按照题目要求输出,每个名字一行。
输入样例 1
acm
输出样例 1
acm
amc
cam
cma
mac
mca
语言:C++
求解答!
@CSDN-Ada助手
#include <iostream>
#include <algorithm>
using namespace std;
void method(string name, string prefix) {
if (name.length() == 0) {
cout << prefix << endl;
return;
}
for (int i = 0; i < name.length(); i++) {
string newPrefix = prefix + name[i];
string newName = name.substr(0, i) + name.substr(i + 1);
method(newName, newPrefix);
}
}
int main() {
string name;
cin >> name;
sort(name.begin(), name.end());
method(name, "");
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!【以下回答由 GPT 生成】
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
// 判断两个字符串是否谐音
bool isHomophone(const string& s1, const string& s2) {
string sorted_s1 = s1;
string sorted_s2 = s2;
sort(sorted_s1.begin(), sorted_s1.end());
sort(sorted_s2.begin(), sorted_s2.end());
return sorted_s1 == sorted_s2;
}
// 递归生成所有谐音子名字
void generateHomophones(const string& name, const string& current, int length) {
if (current.length() == length) {
cout << current << endl;
return;
}
for (int i = 0; i < name.length(); i++) {
string next = current + name[i];
if (isHomophone(next, name) && next.find(current) == string::npos) {
generateHomophones(name, next, length);
}
}
}
// 排序并输出谐音子名字
void sortAndPrintHomophones(const string& name) {
string sorted_name = name;
sort(sorted_name.begin(), sorted_name.end());
for (int length = 3; length <= sorted_name.length(); length++) {
generateHomophones(sorted_name, "", length);
}
}
int main() {
string name;
cin >> name;
sortAndPrintHomophones(name);
return 0;
}
将以上代码保存为cpp文件,使用C++编译器编译运行即可输出结果。