【题目链接】
ybt 1097:画矩形
OpenJudge NOI 1.5 42:画矩形
【题目考点】
1. 循环嵌套
【解题思路】
思路1:按行输出
- 输入高h,宽w,字符c,是否实心x
- 内部字符c_in有两种,若是实心图形,内部字符是c,若是空心图形,内部字符是’ '(空格)
- 上下两行,需要输出w个c,再输出换行。
- 中间的h - 2行,需要先输出一个c,再输出w - 2个c_in,再输出一个c,再输出换行。
思路2:遍历矩阵
循环嵌套输出整个矩阵
针对每个位置进行判断,如果符合条件,则输出*,否则输出’ '。
条件为:
- 如果是外圈,即行号为1或h,或列号为1或w,那么输出*
- 如果不是外圈,是内部位置,那么判断是否是实心,是实心输出*,否则输出’ ’
【题解代码】
解法1:按行输出
#include<bits/stdc++.h>
using namespace std;
int main()
{
int h, w, x;//h高 w宽 x为1实心 0空心
char c;
cin >> h >> w >> c >> x;
char c_in = x == 1 ? c : ' ';//内部字符
for(int i = 0; i < w; ++i)//第一行
cout << c;
cout << endl;
for(int i = 0; i < h - 2; ++i)//中间h - 2行
{
cout << c;//第一个字符
for(int j = 0; j < w - 2; ++j)//输出内部字符
cout << c_in;
cout << c << endl;//最后一个字符
}
for(int i = 0; i < w; ++i)//最后一行
cout << c;
cout << endl;
return 0;
}
解法2:遍历矩阵
#include<bits/stdc++.h>
using namespace std;
int main()
{
int h, w, x;//h高 w宽 x为:1实心 0空心
char c;
cin >> h >> w >> c >> x;
for(int i = 1; i <= h; ++i)//遍历行
{
for(int j = 1; j <= w; ++j)//遍历列
{
if(i == 1 || i == h || j == 1 || j == w)//如果是外圈
cout << c;
else//如果是内部
{
if(x == 1)//实心
cout << c;
else//空心
cout << ' ';
}
}
cout << endl;//每输出完一行要换行
}
return 0;
}