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

2009年2月7日星期六

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

先看几个数: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时,有两个解。



具体实现请看代码:





view plaincopy to clipboardprint?
static void Main(string[] args)//调用
{
for (int j = 1; j < 10; j++)
GetArrayResult(j);
}

static void GetArrayResult(int n)
{
int[] number = new int[2 * n];//定义一个2*n个元素的整型数组
List list = new List();
list.Add(number);//未加入任何数字之前,列表只有一个数组,数组中所有的数都为0
for (int i = 1; i <= n; i++)//将1到n的数逐一加到数组中
{
list = GetIntArray(list, i, 2 * n);
}
Console.WriteLine("当N的值为"+n+"时,共有"+list.Count+"组解:");
foreach (int[] array in list)//打印出所有的解
{
foreach (int num in array)
Console.Write(num);
Console.WriteLine();
}
}

static List GetIntArray(List list, int n, int count)
{
List temp = new List();//声明一个新的数组列表
foreach (int[] array in list)//从数组列表中逐个取出数组,给数组加上数n
{
for (int i = 0; i < count; i++)
{
int[] tempArray = array.ToArray();
//检查数组中第i位和第(i+n+1)位是否为0
if (i + n + 1 < count && tempArray[i] == 0 && tempArray[i + n + 1] == 0)
{
tempArray[i] = n;//给第i位和第(i+n+1)位赋值
tempArray[i + n + 1] = n;
temp.Add(tempArray);//将新的数组加到temp数组列表中
}
}
}
return temp;//返回新的数组列表
}

/*输出结果
当N的值为1时,共有0组解:
当N的值为2时,共有0组解:
当N的值为3时,共有2组解:
312132
231213
当N的值为4时,共有2组解:
41312432
23421314
当N的值为5时,共有0组解:
当N的值为6时,共有0组解:
当N的值为7时,共有52组解:
17125623475364
17126425374635
16172452634753
15167245236473
14156742352637
14167345236275
16135743625427
15173465324726
15163745326427
15146735423627
51716254237643
41716425327635
41617435263275
71316435724625
71416354732652
61517346532472
46171452632753
73161345726425
46171435623725
56171354632742
74151643752362
57141653472362
36713145627425
57416154372632
26721514637543
45671415362732
23726351417654
34573641512762
23627345161475
52472654131763
26327435614175
26325734615147
24723645317165
52732653417164
52462754316137
35723625417164
27423564371516
25623745361417
52642753461317
57236253471614
53672352461714
34673245261715
72632453764151
72462354736151
62742356437151
72452634753161
57263254376141
73625324765141
37463254276151
35743625427161
53647352462171
46357432652171
当N的值为8时,共有300组解:
1712862357436854
1712852637453864
1712682537463584
1712852467354836
1618257263458374
1617285263475384
1618274265348735
1718246257438653
1815267245836473
1716285247635483
1518627523468374
1516782542637483
1318637245268475
1317835264275846
1316837425624875
1318536724528647
1316835724625847
1316738524627548
1415864725326837
1316834752642857
1317538642572468
1613857362452874
1517386532472684
1514678542362738
1613784365247285
1613758364257248
1517368534276248
1418634753268257
1415784365237286
1415684735263287
1813475364825726
1713845367425826
1713568347526428
1516738543627428
1518473564328726
1516478534623728
1815374635842762
1716384537642582
1814637543862572
1714853647352862
1714683547362582
1617483564372582
1714586347532682
1615847365432872
8121726358437654
8121627538463574
8121724568347536
8121625748365437
5181725623487364
6171825624735843
4181742562387536
3181367245286475
3181375264285746
5161785246237483
3171386425724685
3171368524726548
4161845726325837
4161748526327538
3181347562482576
3181346752482657
3171384562742586
3171358642752468
7131853672452864
7131683572462584
5181375632482764
7141586472532683
6151847652432873
7131683475264285
5181365734286247
4161748356237258
8131743568427526
8131573468524726
8131563748526427
5171835463724826
7141863475326825
5161845736423827
7141568473526328
6151748653427328
6171834653742852
6181537643582472
8141673458362752
6181473654382752
2812167345836475
2812175364835746
2812174635843765
2812156734853647
2812164753846357
2812157463854376
7812162574836543
4718146257238653
5618175264238743
6418174625328735
4617148562372538
7416184572632583
5814175642832763
7318134675248265
4618147365238275
6417184635273285
8514167548236273
6714185647235283
8316135748625427
8613175368425724
7518136573428624
4718143567328526
4815146735823627
4716148537623528
5814165743826327
5618145763428327
7813156374852642
5817135643872462
8416174358632752
5716185347632482
6814157643852372
7516184573642382
7281215673485364
7281216475384635
8271216458734653
8271215648735463
3681317562482574
6471814652732853
3681317465284275
3681315764285247
8451714658237263
3861315746825427
6831713645827425
8631713568427524
6471814635723825
5841715463827326
7831613574862542
5671815364732842
7481514673582362
7581416574382632
7561814576342832
6751814657342832
2682171465384735
2862171456834753
4758141657238263
6378131645728425
7368131576428524
4578141563728326
7386131574682542
4857141653872362
2852716154837643
2672815164735843
3758316157428624
3857316154872642
2572861514736843
3568371516428724
3586371514682742
4567841516372832
2382736151487654
2472864151736853
4278246151738653
3486374151682752
2462784516137583
4268247516138573
3485374615182762
3467384516172582
2632783561417584
2452864751316837
6238273651418754
4258246751318637
5248275461318736
3628327561418574
3574386541712682
5374835641712862
2382437564181576
2382436754181657
2362834756141857
2632853764151847
2482374635181765
2452684753161387
6237283645171485
5283275364181746
4257248653171368
5247285463171386
7245286475131683
3627328564171548
7425824675131863
5724825647131863
3582372564181746
4752842657131863
3645378465121728
3564378546121728
5364835746121827
4635843765121827
2832463754816157
2732583467514186
2842367435816175
2572368534716148
2642783465317185
2462584736513187
7238243675418165
7236283475614185
8253267358416174
7263285376415184
6258237653418174
4268243756318157
4275248635713168
7245268475316138
3825327465814176
3726328457614158
5823725364817146
5728325637418164
5628425764318137
3672382465714185
3852362754816147
8352732658417164
5378235264718146
3478324625718165
3568327526418174
3456384752612187
6734583647512182
7536483574612182
7463584376512182
5673485364712182
6475384635712182
5746385437612182
2572834563741816
2572638543761418
2742853467351816
2582473564381716
8237243568471516
8236253748651417
7283246375481615
5286235743681417
6284273645381715
7246258473651318
6274258643751318
6257248653471318
8527326538471614
7426824375631815
5824625743861317
3782342567481516
3862352746851417
4672842365731815
4852642753861317
4682542763581317
8642572468531713
6852472654831713
7562842576431813
6752842657431813
8357236258471614
7385236275481614
8456274258631713
5864275246831713
3847326425871615
6475824625731813
5746825427631813
6357832652471814
3485374265281716
4637843265271815
7345638475261218
6357438654271218
4753648357261218
4567348536271218
2782345637485161
2862357436854171
2852734653847161
2852637453864171
2682537463584171
2752683457364181
2852467354836171
2672485364735181
8273264358746151
6278234653748151
8247263458376151
8246257438653171
6285247635483171
6275284635743181
7823625374865141
6827325634875141
7528623574368141
8426724358637151
8427524638573161
5827425634873161
8372632458764151
4862742356837151
4782542637583161
8642752468357131
7582462574386131
7386235274685141
8457264258376131
7485264275386131
7468254276358131
5784265247386131
6485724625387131
5748625427368131
3847362452876151
4738643257268151
3845367425826171
3746385427625181
3568347526428171
5378435624728161
4835743625827161
4738543627528161
6384537642582171
4853647352862171
4683547362582171
4586347532682171
当N的值为9时,共有0组解:

*/

0 评论:

发表评论