求用c++/c语言编写一个输入n输出1~n的所有排列(千万不是排列数哦)的...
推荐于2017-12-16 · 知道合伙人软件行家
gongxinheng
知道合伙人软件行家
向TA提问 私信TA
知道合伙人软件行家
采纳数:55
获赞数:380
6年游戏开发经验。曾在多个MMO PC游戏以及手游项目担任主程。 目前在美国华盛顿州立大学留学并参与研究项目
向TA提问 私信TA
关注
展开全部
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n;
cout << "Input n" << endl;
// 输入n
cin >> n;
// 这里可以自己做输入错误检测
// 给数组动态分配大小
int* a = new int[n];
// 给数组赋值(要排列的数据源)
for(int i = 1; i <= n; i++)
{
a[i - 1] = i;
}
do{
// 依次输出每个数
for(int i = 0; i < n; i++)
{
cout << a[i] << " ";
}
// 换行
cout << endl;
}
// 做排列计算(C++ stl函数)
while (next_permutation(a,a+n));
// 记得释放
delete[] a;
return 0;
}
运行结果如下:
展开全部
// 主要是递归的应用
#include <cstdio>
using namespace std;
const int MAXN = 16;
bool visit[MAXN+1];
int out[MAXN+1];
void gao(int d, const int n) {
if (d == n) {
for (int i=0; i<n; ++i) printf("%d%s", out[i], i==n-1?"\n":" ");
return;
}
for (int i=1; i<=n; ++i) if (!visit[i]) {
visit[i] = true;
out[d] = i;
gao(d+1, n);
visit[i] = false;
}
}
int main() {
int n;
scanf("%d", &n);
gao(0, n);
return 0;
}
#include <cstdio>
using namespace std;
const int MAXN = 16;
bool visit[MAXN+1];
int out[MAXN+1];
void gao(int d, const int n) {
if (d == n) {
for (int i=0; i<n; ++i) printf("%d%s", out[i], i==n-1?"\n":" ");
return;
}
for (int i=1; i<=n; ++i) if (!visit[i]) {
visit[i] = true;
out[d] = i;
gao(d+1, n);
visit[i] = false;
}
}
int main() {
int n;
scanf("%d", &n);
gao(0, n);
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-02-21
展开全部
嗯,是个难题
[
[
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询