一本通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.冷静分析永远是第二要务(第一要务是慌...)
从题干和输入输出范例中剥取信息也是奥赛考察的重点之一。