Ну уже вы сами нашли ответ. Однако если вам хочется что-бы "узор" из единиц и нулей не повторялся примитивно, как в вашем решении, то стоит делать следующим образом:
1. Создать пустую матрицу n*n.
2. В начале координат заполнить рандомно квадрат k*k единицами в кол-ве S.
3. Сместить квадрат k*k на одну клетку.
4. Проверить кол-во единиц в квадрате.
5. Добавить необходимое кол-во единиц в новые клетки, так что бы их было S. Опять же распределив их рандомно.
6. Повторять пункты 3-5 пока матрица n*n не закончится.
7. Профит!!!
Таким образом получаем матрицу n*n с уникальным и не повторяющимся рисунком.