Exercise(19):排列2

/* 郑裕民 排列 [问题描述] 输入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;
}

你可能感兴趣的:(蓝桥)