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; }