Python очень близок к псевдокоду.
Вы можете прочитать исходный код Python в itertools.permutations и просто скопировать в C.
Вот пример того, как это работает:
#!/usr/bin/env python
import itertools
s='a1'
print set(itertools.permutations(s*len(s), len(s)))
Выход:
set([('1', '1'), ('a', '1'), ('a', 'a'), ('1', 'a')])
Вот еще более простой способ:
>>> s='a1'
>>> ['{}{}'.format(x,y) for x in s for y in s]
['aa', 'a1', '1a', '11']
>>> s='abc'
>>> ['{}{}{}'.format(x,y,z) for x in s for y in s for z in s]
['aaa', 'aab', 'aac', 'aba', 'abb', 'abc', 'aca', 'acb',
'acc', 'baa', 'bab', 'bac', 'bba', 'bbb', 'bbc', 'bca',
'bcb', 'bcc', 'caa', 'cab', 'cac', 'cba', 'cbb', 'cbc',
'cca', 'ccb', 'ccc']
Чтобы развернуть понимание списка, используйте NESTED LOOPS, например так:
>>> for x in s:
... for y in s:
... for z in s:
... print '{}{}{}'.format(x,y,z)