一、字符串加密:
答案如下:
二、数字+小数点组合输出
思路:
遍历所有的数,用DFS来做,
又因为只能有1个小数点,则遍历每个小数点的位置,针对每个位置做DFS。
还要注意最后一位不能为0,要去掉这种情况!
还要注意去重就放在set集合中来做。
c++中string类型转为const char*:const char*p = v.c_str();
c++中string类型转为float:float p = atoi(str);
,记得需要#include <cstdlib>
// 有些输出是为了方便分析打印的,提交的时候要记得删除。
#include <iostream>
#include <string>
#include <vector>
#include <set>
#include <cstdlib>
#include <algorithm>
using namespace std;
vector<string> v;
set<string> mySet;
vector<string> ret;
vector<float> myRet;
bool vis[50];
int point; //小数点的位置
void dfs(string s, int cnt) {
cout << "s = " << s << endl;
if (cnt == v.size()) {
if (*(s.end() - 1)== '0') return;
else {
mySet.insert(s);
return;
}
}
for (int i = 0; i < v.size(); i++) {
if (!vis[i]) {
vis[i] = true;
if (cnt==point) {
dfs(s + "." + v[i], cnt + 1);
} else {
dfs(s + v[i], cnt + 1);
}
vis[i] = false;
}
}
return;
}
int main() {
v.push_back("1");
v.push_back("11");
v.push_back("2");
//遍历小数点的位置
for (int i = 1; i < v.size(); i++) {
point = i;
cout << "point = " << point << endl;
cout << "len(set) = " << mySet.size() << endl;
dfs("", 0);
}
set<string>::iterator it = mySet.begin();
for (;it != mySet.end(); it++) {
ret.push_back(*it);
}
cout << "====================================" << endl;
//string类型转为float类型
for (int i = 0; i < ret.size(); i++) {
const char *s = ret[i].c_str();
myRet.push_back(atof(s));
}
//排序
sort(myRet.begin(), myRet.end());
//输出验证
for (int i = 0; i < ret.size(); i++) {
cout << myRet[i] << " ";
}
cout << endl;
return 0;
}