#console
Declare Function printf CDECL Lib"msvcrt" (fmt As *Byte, ...) As Long

/***********************************************************
combinat.c -- 組合せの数
***********************************************************/


Function comb(n As Long, k As Long) As Long
If k = 0 Or k = n Then
comb = 1
Exit Function
End If

/* if (k == 1) return n; */

comb = comb(n - 1, k - 1) + comb(n - 1, k)
End Function



Function combination(n As Long, k As Long) As DWord
Dim i As Long, j As Long
Dim a[17] As DWord

If n - k < k Then k = n - k
If k = 0 Then
combination = 1
Exit Function
End If

If k = 0 Then
combination = n
Exit Function
End If

If k > 17 Then
combination = 0 /* error */
Exit Function
End If

For i = 1 To k-1
a[i] = i + 2
Next

For i = 3 To n - k + 1
a[0] = i
For j = 1 To k
a[j] = a[j] + a[j - 1]
Next
Next
combination = a[k - 1]
End Function

Const N = 8


Dim n As Long, k As Long

printf(Ex"\n k")

For k = 0 To N
printf("%6d", k)
Next

printf(Ex"\nn ")

For k = 0 To N
printf("------")
Next
printf(Ex"\n")

For n = 0 To N
printf("%d |", n)
For k = 0 To n
printf("%6d", comb(n, k))
Next
printf(Ex"\n")
Next

printf(Ex"\n k")
For k = 0 To N
printf("%6d", k)
Next
printf(Ex"\nn ")
For k = 0 To N
printf("------")
Next
printf(Ex"\n")
For n = 0 To N
printf("%d |", n)
For k = 0 To n
printf("%6lu", combination(n, k))
Next
printf(Ex"\n")
Next

For k = 0 To 17
printf(Ex"34C%-2d = %10lu\n", k, combination(34, k))
Next

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2010年07月21日 21:06