Citación del post de
Josber
|
❞
Serían combinaciones, (30!), no permutaciones, ¿no?, perdón si estoy equivocado, hace tantos años de las matemáticas ... a ver si alguiien más puesto que yo, nos lo aclara 
|
Em anexo projecto em Powercobol para calculo de um factorial e uma solução para o problema:
Código COBOL:
* IDENTIFICATION DIVISION.
* PROGRAM-ID. ACCSUM.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 ACCOUNTS.
05 ACC-X PIC S9(4)v99 COMP-3
OCCURS 12 TIMES.
01 B PIC 9(06) comp.
01 bx PIC 9(06) comp.
01 pos pic 9(06) comp.
01 sum1 pic s9(8)v99 comp-3.
01 sum2 pic s9(8)v99 comp-3.
01 r pic 9(06) comp.
01 res pic 9(06) comp.
01 comb pic x(15) value space.
PROCEDURE DIVISION.
0000-MAIN SECTION.
PERFORM 0100-init
perform 0200-process
EXIT PROGRAM.
0100-init section.
move 134 to ACC-X(1)
move 400 to ACC-X(2)
move 322 to ACC-X(3)
move 100 to ACC-X(4)
move 300 to ACC-X(5)
move 86 to ACC-X(6)
move 600 to ACC-X(7)
move 700 to ACC-X(8)
move 800 To ACC-X(9)
move 200 to ACC-X(10)
move 123 to ACC-X(11)
move 203 to ACC-X(12).
*> exit. *> GnuCobol
0200-process section.
perform varying b from 0 by 1
until b > 4095 *> 2^12 --> se for 30 numeros tem k ser 2^30 = 1.073.741.824
compute bx = b
compute pos = 0
move zero to sum1 sum2
perform until bx = zero
divide bx by 2 giving res remainder r
if ( r NOT = zero )
compute sum1 = sum1 + acc-x ( pos + 1 )
move '1' to comb(pos + 1 : 1)
else
compute sum2 = sum2 + acc-x ( pos + 1 )
move '0' to comb(pos + 1 : 1)
end-if
compute bx = bx / 2
add 1 to pos
end-perform
if (sum1 = 986 ) then
display "-->Combinação: " comb " -->Soma=" sum2
end-if
end-perform.
*> exit. *> GnuCobol