欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

1027 打印沙漏 (20 分)

程序员文章站 2022-06-08 08:30:27
...

1027 打印沙漏 (20 )

1027 打印沙漏 (20 分)

我的代码

 1// 1027 打印沙漏 (20 分).cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
 2//
 3
 4#include <iostream>
 5#include <math.h>
 6using namespace std;
 7int main(){
 8    int i;
 9    cin >> i;
10    char s;
11    cin >> s;
12    int num_total = 0;
13    int number_print = 0;
14    //算出第一行的个数
15    for (int j = 1; j < i / 2 - 1 ; j++) {
16        num_total = j * j * 2 - 1;
17        if (i <= num_total)
18            number_print++;
19    }
20    if (!number_print) {
21        cout << s << endl;
22        cout << i - 1;
23        return 0;
24    }
25    number_print = sqrt(number_print) + 1;//包含1的层数
26    //正序打印
27    for (int i = number_print - 1; i >= 0; i--) {
28        for (int j = 0; j < 2 * (i) + 1; j++){
29            j == 2 * (i) ? cout << s << endl : cout << s;
30        }
31        if (i == 0)
32            break;
33        for (int line = 0; line < number_print - i; line++) {
34            cout << " ";
35        }
36    }
37    //逆序打印
38    int number_pace = number_print - 1;
39    for (int i = 1; i < number_print; i++) {
40        for (int line = 1; line < number_pace; line++) {
41            cout << " ";
42        }
43        for (int j = 0; j < 2 * i + 1; j++) {
44             cout << s;
45        }
46        if (i != number_print - 1)
47            cout << endl;
48        number_pace--;
49    }
50    //计算差值
51    int size = number_print * number_print * 2 - 1;
52    if(i - size)
53        cout << "\n" << i - size;
54}

思路

没什么难度,就是要注意好空格,换行的情况。