1027 打印沙漏 (20 分)
程序员文章站
2022-06-08 08:30:27
...
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}
思路
没什么难度,就是要注意好空格,换行的情况。
上一篇: 哈希是什么意思??详细点