我正在尝试打印出一个倒置的哈希三角形。
./upside_down_oddnumber
###########
#######
###
到目前为止我的工作 -
int main(void) {
int row, column;
int size;
printf("Enter size: ");
scanf("%d", &size);
row = 1;
while (row <= size) {
column = 1;
while (column <= size) {
if (row == (4 * size) -1 || row == column) {
printf("#");
} else {
printf(" ");
}
column++;
}
printf("\n");
row++;
}
return 0;
}
目前正在横向打印对角线,我应该使用等式4n-1。我该怎么办?任何帮助将不胜感激!! 谢谢:))
答案 0 :(得分:1)
首先检查问题背后的算术:
4*size-1
是#
顶行的长度,即打印输出的width
这三个观察结果应该足以构建一个程序。将行和列编号设置为零以保持一致性。每行的长度应为width
个字符。使用以下公式确定要打印的字符:
if (column >= offset && column < width-offset) {
printf("#");
} else {
printf(" ");
}
答案 1 :(得分:0)
问题是你的if语句。
第一部分row == (4 * size) -1
永远不会成为现实,因为行永远不会大于大小,所以4 *大小总是比行大,因此语句永远不会给出真假。
第二部分row == column
当然会为您提供一条线。
你应该重新考虑你的算法。
答案 2 :(得分:0)
或者你可以做到
for(i=size; i>0; --i)
{
for(j=0; j<(4*size-1 - (4*i-1))/2; ++j)
{
printf(" ");
}
for(j=0; j<4*i-1; ++j)
{
printf("%c", '#');
}
printf("\n");
}
(4*size-1 - (4*i-1))/2
将给出每行开头必须打印的空格数。
打印所需数量的空格后,将打印#
。
您也可以使用
printf("%*s", (4*size-1 - (4*i-1))/2, "");
而不是循环来打印空格。
*
中的%*s
用于指定要打印的字符串的宽度。