您的位置:首页 > 其它

Exercise(19):排列2

2016-05-11 13:33 246 查看
/*
郑裕民
排列
[问题描述]
输入n,输出n、n+1、n+2、n+3这4个数字组成的无重复数字的3位数,和符合条件的排列总数。

输入描述
读入一个整数n(0<=n<=7)

输出描述
每行3个用空格隔开的数,表示一个符合条件的排列。

样例输入
0

样例输出
0 1 2
0 1 3
0 2 1
0 2 3
0 3 1
0 3 2
1 0 2
1 0 3
1 2 0
1 2 3
1 3 0
1 3 2
2 0 1
2 0 3
2 1 0
2 1 3
2 3 0
2 3 1
3 0 1
3 0 2
3 1 0
3 1 2
3 2 0
3 2 1
sum:24

问题分析:
思路与Exercise(16)(18)一样,本题只是限制了数的选择(n~n+3)
*/
#include <iostream>
using std::cin;
using std::cout;
using std::ends;
using std::endl;

int n,sum=0;        // sum为计数器:记录排列种数
int arr[4] = {0};
bool mark[10];      // 数的值在1~10之内

void DFS(int step)
{
int i;
if(step == 4)               // 规定3个数
{
for(i=1;i<=3;i++)
cout<<arr[i]<<ends;
sum++;                  // 计数器 加1
cout<<endl;
return;
}

for(i=n;i<=n+3;i++)         // 在数n~n+3之间尝试
{
if(!mark[i])
{
arr[step] = i;
mark[i] = true;
DFS(step+1);
mark[i] = false;
}
}
return;
}
int main()
{
cin>>n;
if(n<0 || n>7) return -1;

DFS(1);
cout<<"sum:"<<sum<<endl;    // 输出排列种数
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  蓝桥