题解 三
好家伙,我刚刚在学校OJ上面AC了一道,我又来写题解啦!感觉写题解是真的好玩,对自己也很有帮助我觉得,哈哈哈!废话不多说,我们进入正题
题目名字:木
题目来源:江西理工大学OJ
题目地址:https://oj.ismdeep.com/problems/1003
题目描述
木木无聊的时候就喜欢画木字
当 n=1的时候,画出来的图形是
当 n=2的时候,画出来的图形是
当 n=3的时候,画出来的图形是
……依次类推
现在已知n(1<=n<=30)的值.要你画图。
输入
有多组测试数据,每组测试数据输入一个正整数n(1<=n<=30)。
当n=0的时候表示输入结束,你不需要处理这组数据
输出
请按照题中给出的规律画出图形。
样例输入
2
4
5
0
样例输出
(博客写文章时的“*”号有特殊作用,所以这里的样例都是放的图片哈)
好了,言归正传。这个题目是一个找规律的题目吧,一开始我看到这个题目,诶,我发现了一丝丝规律,但那只是局部的规律,我在想,这种题目好像大概都是全局规律比较多吧,然后我就一直想找一个全局性的规律,但是我找了一会儿发现我找不到,然后我就想想算了吧,先局部找点规律试试看,一点点的敲出来也不是不可以哈!然后我就进入了摸索,首先我观察了一下,这道题的规律大体分为两种哈,以中间的长“*”段为分界,上面用一种规律,下面用另一种规律。上面的规律就比较简单了哈,就是n为多少,那么左右就各有几个".",中间放一个“*”,然后重复n行。下面的规律其实比较明显,但是你会发现如果你用统一的语言概括性的去描述的话,没有那么好描述,因为它其实还是存在局部性的,所以我索性再分,将外侧的"."(即✳外侧的点)作为一部分,✳内侧的点作为一部分,各自观察规律分别输出。为什么要这样呢,因为我愚蠢,短时间内只想到这个办法哈哈哈 ,可以观察到,下半部分每行✳都是三个,共计n行,所以这样子一分析,然后分段来操作就出来啦!
说了这么多,上代码!
#include <iostream>
using namespace std;
int main()
{
int n;
for (;;)
{
cin >> n;
if (n == 0)
break;
for (int i = 1; i <= n; i++)
{
for (int k = 1; k <= n; k++)
cout << ".";
cout << "*";
for (int k = 1; k <= n; k++)
cout << ".";
cout << endl;
}//这上面是上半部分的操作
for (int i = 1; i <= 2 * n + 1; i++)
cout << "*";//这里是*号界限
cout << endl;
int dian1 = n - 1;
int dian2 = 0;
for (int i = n; i >= 1; i--)//你会看到,我的操作其实比较长,但是易懂
{
for (int j = dian1; j >= 1; j--)
{
cout << ".";
}
cout << "*";
for (int j = dian2; j >= 1; j--)
{
cout << ".";
}
cout << "*";
for (int j = dian2; j >= 1; j--)
{
cout << ".";
}
cout << "*";
for (int j = dian1; j >= 1; j--)
{
cout << ".";
}
cout << endl;
dian1--;
dian2++;
}
cout << endl;
}//这上面是下半部分的操作
return 0;//愉快的返回0结束啦!
}
解释了这么多,你还别说,真不累,你们应该也懂那种做自己喜欢的事情的那种愉悦吧!虽然说写题解需要花一些时间,但是真的值!以后难的题目多了,写题解很有助于记忆!
嘿嘿,我又黎我的目标更近了一步!
好了,每篇题解最后都要附上一句话。
乘风破浪会有时,直挂云帆济沧海