题目链接
https://pintia.cn/problem-sets/994805260223102976/problems/994805294251491328
题解
主要有两个内容:
- 获取第一行(最长行)字符的个数。这个与一般的菱形打印不同,该题的字符不一定用完。
- 通过循环输出空格与字符(末尾空格就不用输出了)
// 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/
欢迎讨论和交流!