「→が7個と↑が7個」の同じものを含む順列
オリジナル
上と同じです。大学入試数学問題集成>【3】
公式サイト
問題と解答
WolframAlphaのウオーミングアップ
<方法1>、<方法2>、<方法3>について、(違い?)呼び方がありますか?
A地点→B地点(3432通り)
<方法1>binomial(7+7,7)
<方法2>binomial(7+7,7)*binomial(7,7)
<方法3>factorial(7+7)/(factorial(7)*factorial(7))
WolframAlphaで(kamelink様と公式サイトの方法で)
(1) N_APとN_PB
factorial(2+4)/(factorial(2)*factorial(4)) * factorial(5+3)/(factorial(5)*factorial(3))
(2)入力が最大文字数を超えています.がでますが、計算します。
840
+1*factorial(2+7)/(factorial(2)*factorial(7))
+factorial(5+5)/(factorial(5)*factorial(5))*factorial(2+2)/(factorial(2)*factorial(2))
-factorial(2+4)/(factorial(2)*factorial(4))*factorial(3+1)/(factorial(3)*factorial(1))*factorial(2+2)/(factorial(2)*factorial(2))
-1*1*factorial(2+2)/(factorial(2)*factorial(2))
840+36+1512-360-6=2022
(2)!を使って
excelの計算式で(kamelink様の「和の法則」より)
操作の方が早いかもしれません。以下に、vbaのマクロ記録があります。
概略説明。
(0)
①A8に1を入力する。
②8行目は、左参照コピー。(B列目~H列目)
➂1列目は、下参照コピー。(7行目~1行目)
④B7は,計算式=A7+B8
⑤B7計算式をC7~H7へコピー
⑥B7からH7を,6行目から1行目へコピー
⑦H1が3432になります。
(1)
⑧A1:B3範囲をクリア。D5:H8範囲をクリア
⑨H1が840になります。
(2)
⑧C4を0,F8を0,F3を0
⑨H1が1410になります。
操作方法を、excelVBAで(kamelink様の「和の法則」より)
Sub Macro0()
Range("A8").Select
ActiveCell.FormulaR1C1 = "1"
Range("B8").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=RC[-1]"
Range("B8").Select
Selection.Copy
Range("B8:H8").Select
ActiveSheet.Paste
Range("A8").Select
Application.CutCopyMode = False
Selection.Copy
Range("A7").Select
Application.CutCopyMode = False
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=R[1]C"
Range("A7").Select
Selection.Copy
Range("A1:A7").Select
Range("A7").Activate
ActiveSheet.Paste
Application.CutCopyMode = False
Range("B7").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=RC[-1]+R[1]C"
Range("B7").Select
Selection.Copy
Range("B7:H7").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.Copy
Range("B1:H7").Select
Range("B7").Activate
ActiveSheet.Paste
Application.CutCopyMode = False
Range("H1").Select
End Sub
’H1の値が3432
(1)Macro0を実行後、以下のMacro1を実行して下さい。
Sub Macro1()
Range("A1:B3").Select
Selection.ClearContents
Range("D5:H8").Select
Selection.ClearContents
Range("H1").Select
End Sub
’H1の値が840
(2)Macro0を実行後、以下のMacro2を実行して下さい。
Sub Macro2()
Range("C4").Select
ActiveCell.FormulaR1C1 = "0"
Range("F8").Select
ActiveCell.FormulaR1C1 = "0"
Range("F3").Select
ActiveCell.FormulaR1C1 = "0"
Range("H1").Select
End Sub
’H1の値が1410
sympyで(kamelink様の「和の法則」で)
勉強中。Rのほうがいいですか?
sympyで(Permutation,Combination関数を使って)
勉強中。
sympyで(ループが一番?)
xxxx以下うごきません。勉強中。いい方法がないですか?MemoryError?
itertoolsでした。
(1)
import itertools
all = itertools.product('↑↑↑↑↑↑↑→→→→→→→', repeat=14)
print(list(all))
ip=0
n=0
for x in all:
n=n+1
if (n % 10000==0): print(n)
moji_AP=x[0]+x[1]+x[2]+x[3]+x[4]+x[5]
if(moji_AP.count('→') ==2 and moji_AP.count('↑') ==4 ):
ip=ip+1
print(iP)
(2)勉強中
参考
>どうも同じものを含む順列はプログラムは、しにくい…。
感想
答えの値は、出題者のひと工夫?(2)が解けた受験生は、ホットしたかも。
excelが、最短距離の経路の問題解決には、一番です。excelで、「和の法則」を使えば、簡単でした。
vbaも、あえて作りました。マクロ記録です。n*nに対応したいです。
試験では、「和の法則」で答案用紙に書く強者がいるかもしれません。
8×8は、段数が多すぎてたいへんと思いましたが、excelなら関係ありませんでした。