我需要创建一个空心矩形,但我只允许使用一个循环。该程序按原样工作,但我在代码中使用了两个循环,并且不知道如何继续减少最后一个。 (我们只学习了printf,scanf,if / else和循环,所以没有数组等) 该程序扫描框架的高度,宽度和厚度。
有人可能指出我正确的方法吗?
代码如下:
row = 0;
while(row < height)
{
column = 0;
while(column < width)
{
if(thickness > row) // upper border
{ printf("*");};
if( some conditions ) // left border
{ printf("*");};
if( conditions ) // hollow
{ printf(" ");};
if( conditions ) // right border
{ printf("*");};
if( conditions ) // bottom border
{ printf("*");};
column++;
};
puts("");
row++;
};
答案 0 :(得分:9)
这是一个线索:在0 ... m循环内执行0 ... n循环与执行0 ...(n * m)循环相同。您可以使用除法和模来计算行和列。
答案 1 :(得分:1)
只有在您完全陷入困境或希望看到不同的解决方案时才能阅读 如您所见,没有扫描输入。
#include <stdio.h>
int main(void)
{
int width=5;
int height=6;
int thick=1;
int x=1;
int y=height;
while(y>0)
{
if(y>(height-thick) || y<=thick || x<=(thick) || x>(width-thick))
printf("*");
else
printf(" ");
if(x==width)
{
x=1;
printf("\n");
y--;
}
else
{
x++;
}
}
return 0;
}
答案 2 :(得分:0)
使用以下代码,您可print frame使用1loop+ if-else
,迭代次数为2*column+width-2
int i, column = 6,width=5;
for(i=1;i<=2*column+(width-2);i++)
{
if( i <= column || i-column>=width-1)
printf("* ");
else
printf("\n*%*s\n",2*(column-1),"*"); // prints newline and `*` then Width of 2*(colomn-1) times space and again * and newline.
//if you don't want newline two times, remove trailing one add if statement inside else check i==column+width-2 print newline.
};
广义。
#include <stdio.h>
int main(void) {
int i, column ,width;
printf("Enter two");
scanf("%d%d",&column,&width);
for(i=1;i<=2*column+(width-2);i++)
{
if(i <= column || i-column>=width-1)
printf("*");
else
{
printf("\n*%*s",(column-1),"*");
if (i-column==width-2)
printf("\n");
}
};
printf("\n");
return 0;
}