一本通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.冷静分析永远是第二要务(第一要务是慌...)

   从题干和输入输出范例中剥取信息也是奥赛考察的重点之一。

原文地址:https://www.cnblogs.com/Jiangxingchen/p/12249014.html