| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(inout) | :: | comb(k) | |||
| integer, | intent(in) | :: | k | |||
| integer, | intent(in) | :: | n | |||
| logical, | intent(out) | :: | finish |
pure subroutine find_next_comb(comb, k, n, finish) integer, intent(in) :: k, n integer, intent(inout) :: comb(k) logical, intent(out) :: finish integer :: i if(k == 0 .or. n == 0) then finish = .true. return else if(comb(1) > n - k) then finish = .true. return else finish = .false. end if i = k comb(i) = comb(i) + 1 do if(i < 1 .or. comb(i) < n - k + i + 1) exit i = i - 1 comb(i) = comb(i) + 1 end do do i = i + 1, k comb(i) = comb(i - 1) + 1 end do end subroutine find_next_comb