开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 2 天,点击查看活动详情
特殊的正方形
题目描述
输入n,输出n行n列的由+和.组成的正方形,其中最外面一圈全是+,第二圈全是.,...,对于第i圈,如果i是奇数,那么全是+,否则全是.。
输入格式
一行,一个整数n。
输出格式
n行,为满足题目要求的正方形。注意不要有行末空格。
样例输入
10
样例输出
++++++++++
+........+
+.++++++.+
+.+....+.+
+.+.++.+.+
+.+.++.+.+
+.+....+.+
+.++++++.+
+........+
++++++++++
数据范围
对于100%的数据,保证2≤n≤100。
思路
这个题思路其实很简单,就是一个前缀和问题或者是后缀和问题,这个题的输出要求是按题目要求输出图形,其实这个样例有点点容易误解,当然这个题有很多的解决措施。首先就是考虑换行,考虑奇数偶数的输入区别问题,这个题当时还是在我学c语言的时候写的,所以用的是char数组,通过两个循环,设置不同的位置不同的标志,完成题目要求。我的设置是一个对称循环,这样的话会少写代码,让代码变得更简洁一点,最后再按要求输出出来就好了。这个题有点偏思维吧,因为要考虑图形是怎么被画出来的,考虑清楚题目中对图形的不同要求和不同的情况,这个题就可以写出来啦。后来感觉这篇文章的字数实在是有点水啦,所以决定再加点话,这篇是我第一次接触代码源的时候写的题,当时还啥都不会,全靠别人帮助才写出来。
代码
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int n;
cin>>n;
char a[105][105];
n++;
for(int i=1;i<=n-i;i++){
for(int j=i;j<=n-i;j++){
if(i%2==1){
a[i][j]='+';
a[j][i]='+';
a[n-i][j]='+';
a[j][n-i]='+';
}
else{
a[i][j]='.';
a[j][i]='.';
a[n-i][j]='.';
a[j][n-i]='.';
}
}
}
n--;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
printf("%c",a[i][j]);
}
if(i!=n) cout<<endl;
}
return 0;
}