PAT乙级1027
题目链接
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/
欢迎讨论和交流!
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号