蓝桥杯--数字排列
今有7对数字:两个1,两个2,两个3,...两个7,把它们排成一行。
要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。如下就是一个符合要求的排列:
17126425374635
当然,如果把它倒过来,也是符合要求的。
请你找出另一种符合要求的排列法,并且这个排列法是以74开头的。
注意:只填写这个14位的整数,不能填写任何多余的内容,比如说明注释等。
C++ Code
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#include<bits/stdc++.h>
int a[] = { 0, 7, 4, 0, 0, 0, 0, 4, 0, 7, 0, 0, 0, 0, 0 }; void dfs( int index) { if(index == 4) ///4的位置已经确定 index++; if(index >= 7) ///7的位置也已经确定,且到7的时候已经出答案 { for( int i = 1; i <= 14; i++) printf( "%d ", a[i]); } for( int i = 3; i < 14; i++) ///前面两位已经确定,从第三位开始 { if((i + index + 1) <= 14 && a[i] == 0 && a[i + index + 1] == 0) ///下标没有超限,当前位和相对应的位没有填数 { a[i] = a[i + index + 1] = index; dfs(index + 1); a[i] = a[i + index + 1] = 0; } } } int main() { dfs( 1); return 0; } |