题目描述
由键盘输入 N N N ,按一定的规律打印图形(见输出样例)。
输入格式
一个整数 N N N(其中 3 ≤ N ≤ 21 3≤N≤21 3≤N≤21 ), N N N 为奇数。
输出格式
如题中所描述的图形
样例 #1
样例输入 #1
7
样例输出 #1
$$*$$***$
$*****$$***$$*$$
答题思路:
这道题可以把他看成三个部分:
1.正三角
$$*$$***$
2.中间最大的
$*****$
3.倒三角
$***$$*$$
所以我们要逐个击破,我们先看正三角:
通过观察可以发现正三角第一个有 n ÷ 2 n÷2 n÷2 个空格,而且第一个没有*
,所以要特殊处理,其他的事空格每次-1,*
每次+2,所以可得代码如下:
int sum=n/2,k=1;for(int i=1;i<=n/2;i++){if(i==1) //第一个特殊处理{for(int j=1;j<=sum;j++){printf(" ");}printf("$");sum-=1;}else{for(int j=1;j<=sum;j++){printf(" ");}printf("$");for(int j=1;j<=k;j++){printf("*");}printf("$");sum-=1;k+=2;}printf("\n");}
后面就很简单了,因为是倒三角所以倒三角第一个就是中间,只要是反着就行了,全部代码如下:
#include <bits/stdc++.h>
using namespace std;
int main()
{int n;scanf("%d",&n);int sum=n/2,k=1;for(int i=1;i<=n/2;i++){if(i==1){for(int j=1;j<=sum;j++){printf(" ");}printf("$");sum-=1;}else{for(int j=1;j<=sum;j++){printf(" ");}printf("$");for(int j=1;j<=k;j++){printf("*");}printf("$");sum-=1;k+=2;}printf("\n");}for(int i=n/2+1;i>=1;i--){if(i==1){for(int j=1;j<=sum;j++){printf(" ");}printf("$");sum-=1;}else{for(int j=1;j<=sum;j++){printf(" ");}printf("$");for(int j=1;j<=k;j++){printf("*");}printf("$");sum+=1;k-=2;}printf("\n");}return 0;
}