ZZULIOJ题解
1077: 空心菱形
题目描述
输入一个整数n,(1<=n<=20),输出一个空心菱形,其中每个边由n个’*'组成。
输入
输入包含一个整数,n(1<=n<=20)
输出
输出一个空心菱形,每个边由n个’*'组成
样例输入
5
样例输出
*
* *
* *
* *
* *
* *
* *
* *
*
输出图形的题目,有点麻烦,然后当时昨天是直接搜的代码copy的哈哈哈哈。现在自己重新写了一下,详细的注释了一下。不会很难懂了。相似的题目还有输出矩形、三角形哈哈哈。灵活掌握循环以及变量的关系就可以解决此类问题啦。
代码
#include<stdio.h>
int main()
{
int i,j,n,k;//定义 输出外围空格数k和内部空格数j以及行数i
scanf("%d",&n);//键盘输入边上的*数n
//分成两部分做,上部分和下部分,上部分是n行,下部分只n-1行
for(i=1;i<=n;i++)//i是从上往下数的行数
{
k=n-i;//每次输出的空格数k应该是n-i个
while(k--)//每次输出i-1个空格
printf(" ");
if(i==1)//当是第1行,输出完n-1空格后输出一个*
printf("*");
else//其他行都是两个*中间加(2*i-1)个空格
{
printf("*");
for(j=1;j<=2*i-3;j++)//比如第二行应该是1个空格
printf(" ");
printf("*");
}
printf("\n");//输出完一行之后换一次行
}
for(i=n-1;i>=1;i--)//i是从下往上数的行数
{
k=n-i;//每次输出的空格数应该是n-i个
while(k--)//每次输出i-1个空格
printf(" ");
if(i==1)//当是第1行,输出完n-1空格后输出一个*
printf("*");
else//其他行都是两个*中间加(2*i-3)个空格
{
printf("*");
for(j=1;j<=2*i-3;j++)//比如倒数第二行应该是1个空格
printf(" ");
printf("*");
}
printf("\n");//输出完一行之后换一次行
}
return 0;//程序正常结束
}