一本通1197 画矩形
【题目描述】
根据参数,画出矩形。输入四个参数:前两个参数为整数,依次代表矩形的高和宽(高不少于3行不多于10行,宽不少于5列不多于10列);第三个参数是一个字符,表示用来画图的矩形符号;第四个参数为1或0,0代表空心,1代表实心。
【输入】
输入一行,包括四个参数:前两个参数为整数,依次代表矩形的高和宽(高不少于3行不多于10行,宽不少于5列不多于10列);第三个参数是一个字符,表示用来画图的矩形符号;第四个参数为1或0,0代表空心,1代表实心。
【输出】
输出画出的图形。
【输入样例】
7 7 @ 0
【输出样例】
@@@@@@@ @ @ @ @ @ @ @ @ @ @ @@@@@@@
1.这个题也是那种很好理解,但是代码死活打不出来的那种。想了想觉得还挺好做,但真正上手的时候依然死去活来。
2.话不多说先分析一下这个题吧。
先看一看这个题目的要求,直接想到循环(这可一定)
首先四个变量,两个int,一个char再来一个bool(其实这个用int也没什么大不了的,照样能用)
实心的矩形比较好实现,循环套循环,两轮操作,每次操作输出一个字符就行。
直接分析空心的。
现在有两种方案:
(1):从全局考虑,直接两个循环;
(2):两个循环,把第一行和最后一行(字符是满的)和其他行(只有首尾有字符)分隔开来。
分别按不同的情况输出。
3.正常人都会选第二种好吧,因为第二种代码实现的时候比较简单
4.让我们看看正解,对着正解走一遍流程
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
int a,b;//定义行和列
char c;//定义画矩形的时候要用的字符
bool x;//判断实心空心
int i,j;
cin>>a>>b;
cin>>c;
cin>>x;
if(x)//实心
{
for(i=1;i<=a;i++)//循环高或宽
{
for(j=1;j<=b;j++)
cout<<c;//循环宽或高
cout<<endl;//换行忘了全都凉
}
}
else//空心
{
for(i=1;i<=a;i++)
{
for(j=1;j<=b;j++)
{
if((i==1)||(i==a)||(j==1)||(j==b))//输出列或行首尾的字符
cout<<c;
else
cout<<" ";//输出行或列中间空着的部分
}
cout<<endl;//换行不能忘
}
}
cout<<endl;
return 0;
}
其实也挺简单的对吧。
5.冷静分析永远是第二要务(第一要务是慌...)
从题干和输入输出范例中剥取信息也是奥赛考察的重点之一。

浙公网安备 33010602011771号