------------恢复内容开始------------
题目:
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
*****
***
*
***
*****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
格式错误原因:输出右边没有空格。
输出错误原因:如果你的程序可以正常输出“沙漏”,要注意当没用掉的符号数为0时,也要输出,输出为0。
#include <iostream> #include <cmath> using namespace std; int main() { int n; char c; cin >> n >> c; if(n<7) { cout << c << "\n"; cout << n-1; } else { int temp = sqrt((n-1)/2); int num = 2*temp - 1; int copy = num; for(int i = num;i>0;i--) { int q = 0; if(copy<=num/2) q = copy-1; else q = num-copy; int p = num - 2*q; for(int j = num;j>0;j--) { if(q>0) { cout << " "; q = q - 1; } if(q==0&&p>0) { cout << c; p = p - 1; } } cout << "\n"; copy = copy - 1; } cout << n - 2*temp*temp + 1 << endl; } return 0; }
原文:https://www.cnblogs.com/siberianhusky/p/13307931.html