本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
*****
***
*
***
*****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
19 *
*****
***
*
***
*****
2
1 #include <stdio.h> 2 #include <iostream> 3 4 using namespace std; 5 6 int main(){ 7 int n=19; 8 int ceng=0,ceng2=1; //从中间向两端数的层数 9 int sum =1; //符号总数 10 char fh=‘*‘; 11 int first; //第一行符号的个数 12 cin>>n>>fh; 13 for(int i=3;i<n;i+=2){ 14 if(sum+i*2<n){ 15 sum += i*2; 16 ceng++; 17 first=i; 18 }else{ 19 break; 20 } 21 } 22 //上层 23 for(int i=0;i<ceng;i++){ 24 for(int j=0;j<i;j++){ 25 cout<<" "; 26 } 27 for(int j=first;j>2*i;j--){ 28 cout<<fh; 29 } 30 cout<<"\n"; 31 } 32 //中层 33 for(int i=0;i<ceng;i++){ 34 cout<<" "; 35 } 36 cout<<fh<<"\n"; 37 // 下层 38 for(int i=0;i<ceng;i++){ 39 for(int j=ceng;j>i+1;j--){ 40 cout<<" "; 41 } 42 for(int j=0;j<i*2+3;j++){ 43 cout<<fh; 44 } 45 cout<<"\n"; 46 } 47 48 //cout<<"符号总数:"<<sum<<" 余数"<<n-sum<<" 层数:"<<ceng<<" 第一行符号的个数:"<<first; 49 cout<<n-sum; 50 return 0; 51 }
原文:https://www.cnblogs.com/geyang/p/12310623.html