打印沙漏
分析:
首先根据N确定最多能打印的行数。然后将row作为定值。
观察容易的到
第一行 直接输出字符,没有空格
第二行 起始位置一个空格,可以通过改变i 来确定空格的个数 ,后面的空格可以通过endl 控制实现
..........
..........
接下来
打印中间的那一个字符,
对称打印下半部分
知识点:
多次使用到循环。
// 打印沙漏.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
#include<string>
using namespace std;
int main()
{
int N, row = 0;
char c;
cin >> N >> c;
for (int i = 0;i < N;i++) {
if ((2 * i*(i + 2) + 1) > N)
{
row = i - 1; //根据输入的数据确定打印的行数
break;
} }
for (int i = row;i >= 1;i--) { //控制打印上面的沙漏
for (int k = row - i;k >= 1;k--)//通过不变量row 和i间的关系来确定输出的空格个数
cout << " "; //
for (int j = i * 2 + 1;j >= 1;j--)
cout << c; //紧接着输出符号的个数
cout << endl;
}
for (int i = 0;i < row;i++) //打印中间的那一个字符
cout << " ";
cout << c << endl;
for (int i = 1;i <= row;i++) { //对称的打印沙漏的下半部分
for (int k = row - i;k >= 1;k--)
cout << " ";
for (int j = i * 2 + 1;j >= 1;j--)
cout << c;
cout << endl;
}
cout << (N - (2 * row*(row + 2) + 1)) << endl;
cin.get();
system("pause");
return 0;
}