输入
6 6 4
输出
######
#....#
#....#
#....#
#....#
######
输入
7 7 4
输出
#######
#.....#
#.....#
#.....#
#.....#
#.....#
#######
这是我到目前为止的代码。
#include <stdio.h>
int main()
{
int width;
int breadth;
scanf("%d", &width);
scanf("%d", &breadth);
if (width == 1 && breadth == 1)
{printf ("#\n");}
else{
for(int i = 0; i<breadth; i++){
for(int j = 0; j<width;j++)
{
{printf("#");}
}
printf("\n");}
}
return 0;}
有谁知道如何用“。”替换非边界区域?
ps:没有必要担心第三个输入,它不会影响矩形的形状,因为它只是用于下一个任务。
我猜我可能会改变我的for循环,但此时我的想法已经用尽了。
如果有人能帮我从上面输出相同的输出,我将不胜感激。
谢谢。
答案 0 :(得分:2)
您希望用&#34;。&#34;替换非边界区域。为了达到这个目标,你需要一个满足你边界的条件。
#include <stdio.h>
int main()
{
int width;
int breadth;
scanf("%d", &width);
scanf("%d", &breadth);
if (width == 1 && breadth == 1)
{printf ("#\n");}
else{
for(int i = 0; i<breadth; i++){
for(int j = 0; j<width;j++)
{
if(i==0||j==0)
printf("#");
else if(i==(breadth-1)||j==(width-1))
printf("#");
else
printf(".");
}
printf("\n");}
}
return 0;
}
希望这有效。如果没有或有任何问题,请告诉我。
答案 1 :(得分:1)
你应该使用计数器。例如,一个计数器应该指向您要打印的行,另一个计数器指的是您要打印的列。
如果行计数器为0,则将所有行打印为&#39;#&#39;因为它将成为上边界线 (这会创建 - &gt; #######)
否则如果行计数器与形状的高度相同,那么它就是完成边界线 (#######)
否则,如果它> 0,则将第一个字符打印为&#39;#&#39;,然后打印&#39;。&#39;直到另一个计数器达到形状-1的宽度(例如在7 7中将是5(因为0也计数))然后另一个计数器达到#&#39;#&#39; (#.....#)
我认为,如果你需要进一步的帮助,这就足以让你自己完成它,只要问一下。
答案 2 :(得分:1)
这是工作代码。 你快到了。您需要条件语句来检查边界.. 请参阅检查边界的行
#include <stdio.h>
int main()
{
int width;
int breadth;
scanf("%d %d", &width, &breadth);
if (width == 1 && breadth == 1)
printf ("#\n");
else
{
for(int i = 0; i<breadth; i++)
{
for(int j = 0; j<width;j++)
//Check for boundary.
if( j == 0 || j == width - 1 || i == 0 || i == breadth - 1 )
printf("#");
else
printf(".");
printf("\n");
}
}
return 0;
}
答案 3 :(得分:1)
使用其他答案建议的条件是理想的方法,但如果不清楚,可以将打印分解为更小的循环
for (i=0; i<width; i++) // prints the first line
printf("#"); //
printf("\n"); //
for (j=0; j<breadth-2; j++){ // prints middle breadth-2 lines
printf("#"); // prints the starting hash in middle lines
for (i=0; i<width-2; i++) // prints the '.'s
printf(".");
printf("#\n"); // prints the last hash in middle lines
}
for (i=0; i<width; i++) // prints the last line
printf("#"); //
printf("\n"); //
虽然效率不高,但逻辑很容易理解。 如果需要进一步解释,请告诉我。
编辑:实际上在写完这个答案之后,我后来意识到这个代码实际上会比带分支的代码更快。由于我们自己拆分了迭代域,因此没有分支。这减少了分支预测失败的任何可能性,这在具有条件的解决方案中肯定会发生,因为条件对于小情况是正确的。当然,对于像6x6这样的小型迭代来说无关紧要,只是把想法放在那里。
答案 4 :(得分:1)
我已经通过gcc检查了它,它确实有效。请参阅代码中的注释:
int main()
{
int width;
int breadth;
scanf("%d",&width);
scanf("%d",&breadth);
for(int i = 0; i < width; i++){
for(int j = 0; j < breadth; j++ ){
//first line and last line
if((i == 0)||i == (width - 1)){
printf("#");
//first column and last column
}else if((j == 0)||(j == (breadth -1))){
printf("#");
//other case
}else{
printf(".");
}
}
printf("\n");
}
return 0;
}