我想在一行中绘制 3 种形状的所有组合 (3!=6):空单元格、X
或矩形。
当前代码:
对于空单元格:
void drawEmptyCell()
{
printf("||||||||||||||||||||||||||\n");
printf("| |\n");
printf("| |\n");
printf("| |\n");
printf("| |\n");
printf("| |\n");
printf("| |\n");
printf("| |\n");
printf("| |\n");
printf("| |\n");
printf("| |\n");
printf("||||||||||||||||||||||||||\n");
}
对于带有矩形的单元格:
void drawCellWithRectangle()
{
printf("||||||||||||||||||||||||||\n");
printf("| |\n");
printf("| |\n");
printf("| ************** |\n");
printf("| * * |\n");
printf("| * * |\n");
printf("| * * |\n");
printf("| * * |\n");
printf("| * * |\n");
printf("| ************** |\n");
printf("| |\n");
printf("| |\n");
printf("||||||||||||||||||||||||||\n");
}
对于带有 X
的单元格:
void drawCellWithX()
{
printf("||||||||||||||||||||||||||\n");
printf("| |\n");
printf("| * * |\n");
printf("| * * |\n");
printf("| * * |\n");
printf("| * * |\n");
printf("| * |\n");
printf("| * * |\n");
printf("| * * |\n");
printf("| * * |\n");
printf("| * * |\n");
printf("| |\n");
printf("||||||||||||||||||||||||||\n");
}
我可以使用蛮力方式并采用所有 6 个选项,例如:
void drawOption1()
{
// empty , rectangle , x
printf("||||||||||||||||||||||||||");printf("||||||||||||||||||||||||||");printf("||||||||||||||||||||||||||\n");
printf("| |");printf("| |");printf("| |\n");
printf("| |");printf("| |");printf("| * * |\n");
printf("| |");printf("| ************** |");printf("| * * |\n");
printf("| |");printf("| * * |");printf("| * * |\n");
printf("| |");printf("| * * |");printf("| * * |\n");
printf("| |");printf("| * * |");printf("| * |\n");
printf("| |");printf("| * * |");printf("| * * |\n");
printf("| |");printf("| * * |");printf("| * * |\n");
printf("| |");printf("| ************** |");printf("| * * |\n");
printf("| |");printf("| |");printf("| * * |\n");
printf("| |");printf("| |");printf("| |\n");
printf("||||||||||||||||||||||||||");printf("||||||||||||||||||||||||||");printf("||||||||||||||||||||||||||\n");
}
但我正在寻找其他东西,一路上都没有蛮力。
如有任何建议,我们将不胜感激。
最佳答案
一个好的方法是将形状放入一个字符串数组中。 然后一个适当的算法将绘制它们
像下面这样的东西就可以完成这项工作。 希望你明白这一点
char* x[] = {
"||||||||||||||||||||||||||",
"| |",
"| * * |",
"| * * |",
"| * * |",
"| * * |",
"| * |",
"| * * |",
"| * * |",
"| * * |",
"| * * |",
"| |",
"||||||||||||||||||||||||||"};
char* o[] ..
char* empty[] ..
..
output (" XO");
..
void output (const char* pOut) {
// assert (sizeof(x) == sizeof(o));
// assert (sizeof(x) == sizeof(empty));
int i, j;
for (i = 0; i < sizeof(o) / sizeof(o[0]); i ++) {
const char* c = pOut;
while (*c != 0) {
switch (*c ++) {
case 'X':
printf (x[i]); break;
case 'O':
printf (o[i]); break;
default:
printf (empty[i]); break;
}
}
printf ("\n");
}
}
显然 x,o, empty 需要保持相同的行数。
现在是C,还没有编译,所以可能有错误
关于c - 画3的有效方法! ( 6 次) C 中的三个形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16558457/