Match the Striking Clock
JavaScript (ES6), 104 bytes

Prints time intervals in H.MM,H.MM format.

F=(n,f=0,s=n,t=f++)=&gt;t&lt;f+23?F(n,f,s-=t&amp;1||t/2%12+1,++t,s||alert([f/2%12+.01,-~t/2%12+.01])):f&lt;24&amp;&amp;F(n,f)


Try it online!

Uses essentially the same algorithm as the non-recursive version below.



Non-recursive version, 117 bytes

Outputs a space-delimited string of time intervals in H.MM,H.MM format.

n=&gt;[...Array(24)].map((_,f,a)=&gt;a.map(_=&gt;(s-=t++&amp;1||t/2%12+.5)||(r+=[-~f/2%12+.01,-~t/2%12+.01]+' '),s=n,t=f),r='')&amp;&amp;r


Test cases



let f =

n=&gt;[...Array(24)].map((_,f,a)=&gt;a.map(_=&gt;(s-=t++&amp;1||t/2%12+.5)||(r+=[-~f/2%12+.01,-~t/2%12+.01]+' '),s=n,t=f),r='')&amp;&amp;r

console.log(f(8))
console.log(f(14))
console.log(f(90))
console.log(f(1))
console.log(f(2))




Commented

n =&gt;                           // n = input
  [...Array(24)].map((_, f, a) // FOR f = 0 TO 23:
    =&gt; a.map(_ =&gt;              //   FOR t = f TO f + 23:
      (                        //     update s
        s -=                   //       by subtracting:
          t++ &amp; 1 ||           //         - 1 if t is odd (half hour)
          t / 2 % 12 + .5      //         - the current hour if t is even
      ) || (                   //     if s is equal to zero:
        r += [                 //       update the result string by appending:
          -~f / 2 % 12 + .01   //         - the formatted 'from' time
          ,                    //         - a comma
          -~t / 2 % 12 + .01   //         - the formatted 'to' time
        ] + ' '                //       and a padding space
      ),                       //     inner map() initialization:
      s = n,                   //     - s = target number of strikes
      t = f                    //     - 'to' time = 'from' time
    ),                         //   end of inner map()
    r = ''                     //   start with r = empty string
  )                            // end of outer map()
  &amp;&amp; r                         // return r