Dato m
da una n
barretta di cioccolato, m,n
positivo, emette il numero di modi per rompere la barra in mn
1 per 1 pezzi in cui ogni interruzione si verifica su una griglia.
L'ordine è importante. I pezzi sono anche distinguibili, quindi i due pezzi alle estremità di una barretta di cioccolato 1 per 3 non sono equivalenti.
Ad esempio, per un blocco 2 per 2 abbiamo:
_ _ _ _ _ _ _ _
|_‖_| -> |‗| |_| -> |_| |‗| -> |_| |_|
|_‖_| |_| |_| _ |_| _ _
|_| |_| |_|
_ _ _ _ _ _ _ _
|_‖_| -> |_| |‗| -> |‗| |_| -> |_| |_|
|_‖_| |_| |_| |_| _ _ _
|_| |_| |_|
_ _ _ _ _ _ _ _
|‗|‗| -> |_‖_| -> |_| |_| -> |_| |_|
|_|_| _ _ _ _ _ _
|_|_| |_‖_| |_| |_|
_ _ _ _ _ _ _ _
|‗|‗| -> |_|_| -> |_‖_| -> |_| |_|
|_|_| _ _ _ _ _ _
|_‖_| |_| |_| |_| |_|
Quindi ci sono 4 modi per spezzare una barretta di cioccolato 2 per 2.
Regole
L'input sarà di due numeri interi tramite input di funzione, STDIN, riga di comando o simili. Stampa un singolo numero, il numero di modi per spezzare la barretta di cioccolato.
Poiché i numeri aumentano abbastanza rapidamente, non preoccuparti se l'output supera i limiti interi della tua lingua: l'invio sarà valido fino a quando l'algoritmo funzionerà teoricamente per tutti i possibili input.
Casi test
L'output non dipende dall'ordine di m,n
, quindi i casi di test sono elencati in modo tale m <= n
.
1 1 -> 1
1 2 -> 1
1 3 -> 2
1 4 -> 6
1 5 -> 24
1 10 -> 362880
2 2 -> 4
2 3 -> 56
2 4 -> 1712
2 5 -> 92800
2 10 -> 11106033743298560
3 3 -> 9408
3 4 -> 4948992
3 5 -> 6085088256
3 10 -> 76209753666310470268511846400
4 4 -> 63352393728
A261964 sono i numeri di cioccolato disposti in un triangolo in modo tale che ogni riga corrisponda alla somma m+n
.
options(expressions=...)
e argomento--max-ppsize=
) comporterebbe un codice più lungo di questo.