打印给定列和行约束的交替X和O矩阵?
给定以下参数,我正在尝试编写一个打印 X 和 O 矩阵的算法:
int numRows
int numCols
int charsPerCol
int charsPerRow
例如打电话
printXOMatrix(int charsPerCol, int charsPerRow, int numCols, int numRows);
带参数
printXOMatrix(3,2,15,8);
将导致以下内容被打印到标准输出:
XXXOOOXXXOOOXXX
XXXOOOXXXOOOXXX
OOOXXXOOOXXXOOO
OOOXXXOOOXXXOOO
XXXOOOXXXOOOXXX
XXXOOOXXXOOOXXX
OOOXXXOOOXXXOOO
OOOXXXOOOXXXOOO
XXXOOOXXXOOOXXX
XXXOOOXXXOOOXXX
OOOXXXOOOXXXOOO
OOOXXXOOOXXXOOO
XXXOOOXXXOOOXXX
XXXOOOXXXOOOXXX
OOOXXXOOOXXXOOO
OOOXXXOOOXXXOOO
到目前为止,这是我的代码,如果列数/每列的字符数不同,它似乎可以正确打印,但在以下情况下会失败:
printXOMatrix(2,2,8,8);
以下内容打印到标准输出:
XXOOXXOO
OOXXOOXX
OOXXOOXX
XXOOXXOO
XXOOXXOO
OOXXOOXX
OOXXOOXX
XXOOXXOO
我如何处理这种边缘情况/清理我的代码?这是我到目前为止所拥有的:
回答
好吧,在确定代码与 selbie 所说的不一致之后,问题似乎是当您到达行尾时,您没有将 c 重置回行首时的状态!
但问题应该是:你为什么要写这么多代码?以下完全相同(好吧,除了正确处理边缘情况!):-
void PrintMatrix (int charsPerCol, int charsPerRow, int numCols, int numRows)
{
for (int y = 0 ; y < numRows ; ++y)
{
for (int x = 0 ; x < numCols ; ++x)
{
printf ((((x / charsPerCol) & 1) ^ ((y / charsPerRow) & 1)) != 0 ? "o" : "x");
}
printf ("n");
}
}