赞
踩
分享一下1077空心菱形的做法 困了我一天左右(躺尸
题目要求
代码部分
#include <stdio.h>
#include <math.h>
int main()
{
int hang,lie; int n;
int i;
scanf("%d",&n);
i=n-2;
for (hang=1;hang<=n;hang++)
{
for (lie=1;lie<=2*n-1;lie++)
{
if (hang<=n&&lie==n-(hang-1)||lie==n+(hang-1))
{
printf("*");
}
else printf(" ");
}
printf("\n");
}
for (hang=n+1;hang<=2*n-1;hang++)
{
for (lie=1;lie<=2*n-1;lie++)
{
if (hang>n&&lie==n-i||lie==n+i)
{
printf("*");
}
else printf(" ");
}
printf("\n");
i--;
}
}
第一个二重循环表示上半部分 第二个二重循环表示下半部分
思路比较简单,假设要一个n边的菱形 那么通过观察可以知道 一共有2n-1行和2n-1列。
难点就是在什么位置表示*
两重for循环表示的是依次循环每一个格子(假设菱形在一个2n-1*2n-1的正方形内)
到固定位置便会显示*,那么else对应的其他位置就是空格。
上半部分很好表示 在第一行只有 第n列有*
二行 n+1和n-1;
三行n+2和n-2;
依次根据hang的值来进行递归检测,到对应的列输入*就可以
当一列循环完后则回车键换行进行下一列。
关键是后面的n+1行以及往后
可以发现*的位置不是那么容易再用N和lie和hang的关系表示
那么就需要找规律了
这个规律我是不能太说明清楚的。。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。