题目如下:
输入n,输出n行n列的由+ 和. 组成的正方形,其中最外面一圈全是+ ,第二圈全是. ,...,对于第i圈,如果i是奇数,那么全是+ ,否则全是. 。
输入格式
一行,一个整数n。
输出格式
n行,为满足题目要求的正方形。注意不要有行末空格。
样例输入
10
样例输出
++++++++++
+........+
+.++++++.+
+.+....+.+
+.+.++.+.+
+.+.++.+.+
+.+....+.+
+.++++++.+
+........+
++++++++++
数据范围
对于100%的数据,保证2≤n≤100。
?
AC代码如下:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<vector>
#include <iomanip>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
#define fo(x) for(int i = 1;i<=x;++i)
#define ios ios::sync_with_stdio(false);cin.tie(0), cout.tie(0)
char s[109][109];
int main()
{
ios;
int n;
cin>>n;
char f;
for(int i = 1;i<=n/2;i++)
{
if(i&1) f = '+';
else f = '.';
int q = i;
int a = i+n-2*(i-1)-1;
for(int j = i;j<=a;j++)
s[i][j] = f;
for(int j = i;j<=a;j++)
s[j][i] = f;
for(int j = i;j<=a;j++)
s[a][j] = f;
for(int j = i;j<=a;j++)
s[j][a] = f;
}
if((n/2+1)&1) f = '+';
else f = '.';
if(n&1)
s[n/2+1][n/2+1] = f;
for(int i = 1;i<=n;i++)
{
for(int j = 1;j<=n;j++)
{
cout<<s[i][j];
}
cout<<"\n";
}
}
纯模拟,按题目的意思构建正方形就可以了
注意:n可能为奇数
所以有:
if((n/2+1)&1) f = '+';
else f = '.';
if(n&1)
s[n/2+1][n/2+1] = f;
其他就不多解释了,毕竟题目太简单了!
(: (: (:
|