数字全排列 C++
小明负责公司年会,想出一个趣味游戏: 屏幕给出1~9中任意3个不重复的数字,大家以最快时间给出这几个数字可拼成的数字从小到大排列位于第N位置的数字,其中N为给出的数字中最大的(如果不到这么多个数字则给出最后一个即可)。
注意: 1)2可以当做5来使用,5也可以当做2来使用进行数字拼接,且屏幕不能同时给出2和5;
2)6可以当做9来使用,9也可以当做6来使用进行数字拼接,且屏幕不能同时给出6和9。
如给出:1,4,8,则可以拼成的数字为: 1,4,8,14,18,41,48,81,84,148,184,418,481,814,841 那么最第N(即8)个的数字为81。
输入描述: 输入为以逗号分隔的描述3个int类型整数的字符串。
输出描述: 输出为这几个数字可拼成的数字从小到大排列位于第N(N为输入数字中最大的数字)位置的数字,如果输入的数字不在范围内或者有重复,则输出-1。
示例1 输入 1,4,8 输出 81 说明 可以构成的数字按从小到大排序为1,4,8,14,18,41,48,81,84,148,184,418,481,814,841,故第8个为81
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;;
vector<int> shu; string k = ""; int m;
void yi(string a)
{
for (int i = 0; i < 3; ++i)
{
m = a[i] - '0';
if(find(begin(shu),end(shu),m)==end(shu))
shu.push_back(m);
}
}
void er(string a)
{
char c;
for(int i=0;i<3;++i)
{
k = "";
for (int j = 0; j < 3; ++j)if (i != j)k += a[j];
m = stoi(k);
if (find(begin(shu), end(shu), m) == end(shu))
{
shu.push_back(stoi(k));
c = k[0]; k[0] = k[1]; k[1] = c;
shu.push_back(stoi(k));
}
}
}
void san(string a)
{
shu.push_back(stoi(a));
while(next_permutation(begin(a),end(a)))
{
shu.push_back(stoi(a));
}
}
void math(string a)
{
sort(begin(a), end(a));
yi(a); er(a); san(a);//事实上不需要调用函数san,因为n最大为9,第9位数字必是二位数;
}
int main()
{
string a = ""; char n; string x; char c; string w,ss;
while (scanf("%c", &n))
{
if (n == '2' || n == '6')n = n + 3;
if(n>'9'||n<'0'||find(begin(a),end(a),n)!=end(a))
{
printf("-1"); return 0;
}
a+=n;
c = getchar();
if (c == '\n')break;
}
sort(begin(a), end(a));
w = a; ss = a;
for(int i=0;i<size(a);++i)
{
if (a[i] == '5'|| a[i] == '9')
{
w[i] = a[i]-3; math(w);
}
}
for (int i = 0; i < size(a); ++i)
{
if (a[i] == '9')
{
ss[i] = a[i] - 3;
if (ss != w)math(ss);
}
}
math(a);
sort(begin(shu), end(shu));
for (int i = 0; i < shu.size(); ++i)cout << shu[i] << " ";cout << endl;//输出所有排列数,可去掉此行;
cout << shu[a[2]-'0'-1] << endl;
return 0;
}
分类:
C++
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现