题目链接
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/
欢迎讨论和交流!