It's an infinite loop, and the b variable isn't necessary, but it's interesting to see how a supposed non-programmer is able to structure a (near) solution.
It is actually a complete solution to the problem as stated. The only requirement are that the numbers 1 through 100 are printed, with fizz, buzz, and fizzbuzz replacing them where appropriate. It is not a requirement that that is all that the program does.
Programs are more than just algorithms, they are also documentation of that algorithm. Sometimes they also describe checked invariants of the execution of that algorithm (types).
There's probably a lot more to say about programs that doesn't fit within the "just algorithm" view.