1027 打印沙漏 (20 分)
题目链接:1027 打印沙漏 (20 分)
这道题目是按照题目要求输出图形。
1、图形具有上下对称性
2、图形中每行有规律。
思路:可以根据终端输入的n来判断图形上半部分输出的行数。然后我们按照对称性输出下半部分即可。
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int main() 5 { 6 int n,row,sum,space; 7 char c; 8 cin>>n>>c; 9 int count=(n+1)/2; 10 for(row=1,sum=0;sum<=count;sum+=2*row-1,row++); 11 row-=2; //计算出可以打印的行数。 12 for(space=0;row>0;row--,space++) 13 { 14 for(int i=0;i<space;i++) 15 cout<<" "; 16 for(int k=0;k<2*row-1;k++) 17 { 18 cout<<c;n--; 19 } 20 cout<<endl; 21 } 22 for(space-=2,row=2;space>=0;space--,row++) 23 { 24 for(int i=0;i<space;i++) 25 cout<<" "; 26 for(int k=0;k<2*row-1;k++) 27 { 28 cout<<c;n--; 29 } 30 cout<<endl; 31 } 32 cout<<n<<endl; 33 return 0; 34 } 35 36
特别注意:
不能输出多余的空格。