也谈两个数n(n的值为1与9之间)之间相隔n个数的趣味题

来源:互联网 发布:怎么修改淘宝店铺类目 编辑:程序博客网 时间:2024/06/11 13:27

先看几个数:312132,231213,41312432,23421314

可以看到以上字串有以下特点: 2个1 之间有1个数,2个2 之间有2个数,2个3之间有3个数...
试找出由(1,1,2,2,3,3,4,4,5,5,6,6,..N,N) 2*N(N<=9) 个数组成的字符串满足上述条件的所有组合,即2个1 之间有1个数,2个2 之间有2个数,2个3之间有3个数...2个N之间有N个数。

 

 

看到这道题,便觉得可用求全组合的方法来求,把每2个相同的数看成是一个元素来处理。

我的做法是:(以N=3为例)

先声明一个整形数组,此数组有2*N个数,默认值都为0。

然后从1到N逐个填入到数组中去,(先检查数组的第i位和(i+N+1)位的值是否为0,若都是0则可以填入,否则继续搜索)

填入1时,可以产生以下4组解:

A1、101000

B1、010100

C1、001010

D1、000101

继续填入2时,可以产生以下4组解:

A2、121020(由A1而得)

B2、012102(由B1而得)

C2、201210(由C1而得)

D2、020121(由D1而得)

继续填入3时,可以产生以下2组解:

A2无法往下求解

312132(由B2而得)

231213(由C2而得)

D2无法往下求解

 

因此N=3时,有两个解。

 

具体实现请看代码:

 

 

  

原创粉丝点击