質問<624>2001/8/29
from=山○茂●
「カードシャッフル」


はじめまして、山○といいます。現在就職活動中です。どうしても解い
てほしい問題があります。
ある会社の採用試験で出た問題です。いまだに解けません。

問題

n枚のすべて異なる種類のカードを用意する。 i枚のカードを上から取
る。取ったカードの束を A、残ったカードの束をBと呼ぶ。Aの底から
一枚、Bの底から一枚、交互に一枚ずつカードをAとBより取り新しい束
を作る。最後にAかBで余ったカードはそのまま新しい束の上にのせる。
 
 以上の操作でカードの束が最初の状態(順序)に戻るまでには、操作を
何回繰り返せばよいか?

N=1001、i=100 として結果はどうなるか?


お返事2001/8/31
from=武田


※未解決問題に移しましたが、数教協の仲間の村嶋さんから超級の解答が
寄せられました。感謝!!
さらに、一番下に、この計算をしてくれるJAVAプログラムが送られて
きました。お楽しみください。


お便り2001/8/31
from=村嶋健吾


答は、12025860回です。

(解)
上から数えてx番目のカードは、1回シャッフルすると上からf(x)番目
に移動するものとします。
すると、f(x)は一般に次のようになります。
 f(x)= 2x+n-2i    (1≦x≦i);
     = x-i        (i+1≦x≦n-i);
     = 2x-n-1     (n-i+1≦x≦n).
今、n=1001,i=100 とすると
 f(x)= 2x+801     (1≦x≦100);
     = x-100      (101≦x≦901);
     = 2x-1002    (902≦x≦1001).
です。例えば、
  f(1)=803
です。つまり、1番上にあったカードは1回シャッフルすると、803番目に移
動します。
では、このカードは2回目のシャッフルでどこに移動するでしょうか。
  f(803)=703
です。このようにカードの移動先を順に追っていくと次のようになります。

1,803,703,603,503,403,303,203,103,3,807,707,607,507,407,307,207,107,7,
815,715,615,515,415,315,215,115,15,831,731,631,531,431,331,231,131,31,
863,763,663,563,463,363,263,163,63,927,852,752,652,552,452,352,252,152
,52,905,808,708,608,508,408,308,208,108,8,817,717,617,517,417,317,217,
117,17,835,735,635,535,435,335,235,135,35,871,771,671,571,471,371,271,
171,71,943,884,784,684,584,484,384,284,184,84,969,936,870,770,670,570,
470,370,270,170,70,941,880,780,680,580,480,380,280,180,80,961,920,838,
738,638,538,438,338,238,138,38,877,777,677,577,477,377,277,177,77,955,
908,814,714,614,514,414,314,214,114,14,829,729,629,529,429,329,229,129
,29,859,759,659,559,459,359,259,159,59,919,836,736,636,536,436,336,236
,136,36,873,773,673,573,473,373,273,173,73,947,892,792,692,592,492,392
,292,192,92,985,968,934,866,766,666,566,466,366,266,166,66,933,864,764
,664,564,464,364,264,164,64,929,856,756,656,556,456,356,256,156,56,913
,824,724,624,524,424,324,224,124,24,849,749,649,549,449,349,249,149,49
,899,799,699,599,499,399,299,199,99,999,996,990,978,954,906,810,710,61
0,510,410,310,210,110,10,821,721,621,521,421,321,221,121,21,843,743,64
3,543,443,343,243,143,43,887,787,687,587,487,387,287,187,87,975,948,89
4,794,694,594,494,394,294,194,94,989,976,950,898,798,698,598,498,398,2
98,198,98,997,992,982,962,922,842,742,642,542,442,342,242,142,42,885,7
85,685,585,485,385,285,185,85,971,940,878,778,678,578,478,378,278,178,
78,957,912,822,722,622,522,422,322,222,122,22,845,745,645,545,445,345,
245,145,45,891,791,691,591,491,391,291,191,91,983,964,926,850,750,650,
550,450,350,250,150,50,901,801,701,601,501,401,301,201,101,(1)

最後が(1)になっていますが、1番上に戻ってくるのです。
上に挙げた数字は全部で
    411個
あります。(もちろん1はダブって数えないようにしています。)
これを求めるにはパソコンを使いました。

同様に、次のような数の遷移列が得られます。

2,805,705,605,505,405,305,205,105,5,811,711,611,511,411,311,211,111,11
,823,723,623,523,423,323,223,123,23,847,747,647,547,447,347,247,147,47
,895,795,695,595,495,395,295,195,95,991,980,958,914,826,726,626,526,42
6,326,226,126,26,853,753,653,553,453,353,253,153,53,907,812,712,612,51
2,412,312,212,112,12,825,725,625,525,425,325,225,125,25,851,751,651,55
1,451,351,251,151,51,903,804,704,604,504,404,304,204,104,4,809,709,609
,509,409,309,209,109,9,819,719,619,519,419,319,219,119,19,839,739,639,
539,439,339,239,139,39,879,779,679,579,479,379,279,179,79,959,916,830,
730,630,530,430,330,230,130,30,861,761,661,561,461,361,261,161,61,923,
844,744,644,544,444,344,244,144,44,889,789,689,589,489,389,289,189,89,
979,956,910,818,718,618,518,418,318,218,118,18,837,737,637,537,437,337
,237,137,37,875,775,675,575,475,375,275,175,75,951,900,800,700,600,500
,400,300,200,100,1001,1000,998,994,986,970,938,874,774,674,574,474,374
,274,174,74,949,896,796,696,596,496,396,296,196,96,993,984,966,930,858
,758,658,558,458,358,258,158,58,917,832,732,632,532,432,332,232,132,32
,865,765,665,565,465,365,265,165,65,931,860,760,660,560,460,360,260,16
0,60,921,840,740,640,540,440,340,240,140,40,881,781,681,581,481,381,28
1,181,81,963,924,846,746,646,546,446,346,246,146,46,893,793,693,593,49
3,393,293,193,93,987,972,942,882,782,682,582,482,382,282,182,82,965,92
8,854,754,654,554,454,354,254,154,54,909,816,716,616,516,416,316,216,1
16,16,833,733,633,533,433,333,233,133,33,867,767,667,567,467,367,267,1
67,67,935,868,768,668,568,468,368,268,168,68,937,872,772,672,572,472,3
72,272,172,72,945,888,788,688,588,488,388,288,188,88,977,952,902,802,7
02,602,502,402,302,202,102,(2)
420個

6,813,713,613,513,413,313,213,113,13,827,727,627,527,427,327,227,127,2
7,855,755,655,555,455,355,255,155,55,911,820,720,620,520,420,320,220,1
20,20,841,741,641,541,441,341,241,141,41,883,783,683,583,483,383,283,1
83,83,967,932,862,762,662,562,462,362,262,162,62,925,848,748,648,548,4
48,348,248,148,48,897,797,697,597,497,397,297,197,97,995,988,974,946,8
90,790,690,590,490,390,290,190,90,981,960,918,834,734,634,534,434,334,
234,134,34,869,769,669,569,469,369,269,169,69,939,876,776,676,576,476,
376,276,176,76,953,904,806,706,606,506,406,306,206,106,(6)
140個

28,857,757,657,557,457,357,257,157,57,915,828,728,628,528,428,328,228,
128,(28)
19個

86,973,944,886,786,686,586,486,386,286,186,(86)
11個

以上をまとめますと、
 1の系列 411個
 2の系列 420個
 6の系列 140個
28の系列  19個
86の系列  11個
----------------
合計   1001個

最後に、411,420,140,19,11の最小公倍数=12025860を求めます。
最小公倍数であれば、すべてのカードが元の位置に戻ってくるのです。

はじめ、12025860という数字をパソコンで直接求めようとしました。
配列変数を用意し、何回シャッフルすると元の配列変数の値に戻るかを求め
ようとしました。時間がかかりすぎ、無理でした。
そこで、上のようにカードの遷移系列を求めるという方法に切り替えたの
です。


お便り2001/9/2
from=村嶋健吾




【ホームページ閲覧者への注意】
(1)テキストボックスに、遷移系列(循環する数列)が現れます。
これをクリップボード経由で、他のソフトに貼り付けるなどして、
データを分析して下さい。
(2)以前私が与えた関数 f(x) の式は、2i≦ n のときのものです。
2i>n のときは式が少し変わりますから、注意して下さい。
プログラムは、どちらの場合にも対応しています。