PAT乙级1027

题目链接

https://pintia.cn/problem-sets/994805260223102976/problems/994805294251491328

题解

主要有两个内容:

  1. 获取第一行(最长行)字符的个数。这个与一般的菱形打印不同,该题的字符不一定用完。
  2. 通过循环输出空格与字符(末尾空格就不用输出了)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// PAT BasicLevel 1027
// https://pintia.cn/problem-sets/994805260223102976/problems/994805294251491328

#include <iostream>
using namespace std;

int getLineMaxCount(int maxNum);
int main()
{
// 字符可用数量及字符
int n;char c;
cin >> n >> c;

// 获取第一行字符的个数
int maxNum = getLineMaxCount(n);

// 已输出字符个数
int count=0;

// 当前行输出字符个数
int num = maxNum;

// 输出上半部分
while(num>1){
// 输出空格
for(int i=0;i<(maxNum-num)/2;++i){
cout << ' ';
}

// 输出字符
count+=num;
for(int i=0;i<num;++i){
cout << c;
}

// 换行
cout << endl;
num-=2;
}

while(num<=maxNum){
// 输出空格
for (int i = 0; i < (maxNum - num) / 2; ++i){
cout << ' ';
}

// 输出字符
count+=num;
for (int i = 0; i < num; ++i){
cout << c;
}

// 换行
cout << endl;
num += 2;
}

// 输出剩余字符个数
cout << n-count;

//system("pause");
return 0;
}

// 根据字符可用数量获取第一行字符个数
int getLineMaxCount(int maxNum)
{
int sum=-1,count=1;
while (sum + count * 2 <= maxNum){
sum += count * 2;
count += 2;
}

return count-2;
}

作者:@臭咸鱼

转载请注明出处:https://www.cnblogs.com/chouxianyu/

欢迎讨论和交流!