题目:
http://oj.jzxx.net/problem.php?id=1079
程序:
#include <iostream>
using namespace std;
/*
* 因为图形上下对称,所以构造一个关于对称的预处理映射函数
* 比如,n = 5时:第0行和第4行对称,第1行和第3行对称
* 注意,本题若从0开始计算行,则第0行左边的空格数为0,第1行左边的空格数为1,……
* 若从1开始计算行,也可以,但计算会略麻烦点
*/
int premap(int x, int n)
{
return x > n/2 ? n + 1 - x : x;
}
int main()
{
int n;
cin >> n;
for(int i = 1; i<= n; i++)
{
int mIndex = premap(i, n);
// 左边的空格
for(int j = 1; j < mIndex; j++)
{
cout << ' ';
}
// 左边的X
cout << 'X';
// 中间的空格
for(int k = 1; k <= n - 2 * mIndex; k++)
{
cout << ' ';
}
// 右边的X,注意中间那行只有一个X
if(i != (n/2 + 1))
{
cout << 'X';
}
cout << endl;
}
return 0;
}
加入少儿信息学奥赛学习QQ群请扫左侧二维码,关注微信公众号请扫右侧二维码