输入 n 的值,输出如下例( n=4 )所示的数字菱形。
4
434
43234
4321234
43234
434
4
输入:
n
输出:
数字菱形
友情提示:同学们总结一下打印星号组成的实心图形程序的编程思路:第一步,打印星号组成的正方形;第二步,改变每行星号的个数,打印每行星号数量不一样的图形;如果是空心图形,每行第一个和最后一个位置输出星号,其他位置输出空格。
现在我们练习输出变化的字符,在打印星号图形的基础上,原来输出*号的位置,将printf("*");改为printf("%2d",x);当然,原来输出一个*号的地方只占一个字符的位置,现在都要改为2个字符的位置,如果输出的是数字且多于2个,则要是%3d或%4d了。
x是多少呢?则要寻找其规律,就是该输出位置与所在行列的关系。
注意给出的测试用例,输出的数字是左对齐啊。不用数组就可以完成。
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 2 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 3 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 4 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 5 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
思路:
本题图形是关于第n行对称的,我们可以先写第1到n行的循环。显然先要打印n-hang个空格,然后从输入的整数n开始进行【打印-自减1】循环hang-1次,再【打印-自增1】循环hang次。
因为输入的整数n对图形很重要,是不能再次改动的,所以我们引入过程量p=n,在操作过程中通过改变p来获得要求的图形。记得在每行打印完后让p恢复到n。
第n行以后的图形,观察可知每行空格数量变为hang-n,循环次数只需把第一自然段写的hang替换为2倍的n-hang(求>n的hang,关于n对称的那个<n的hang是多少)即可。
#include <stdio.h>
int main(){
int n=0;
scanf("%d",&n);
int p=n;
for (int hang = 1; hang <= 2*n-1; ++hang)
{
if(hang<=n)
{
for (int i = 0; i < n-hang; ++i)
{
printf(" ");
}
for (int i = 0; i < hang-1; ++i)
{
if(p>=10)
{
printf("%d",p);
}
else
{
printf("%d ",p);
}
p--;
}
for (int i = 0; i < hang; ++i)
{
if(p>=10)
{
printf("%d",p);
}
else
{
printf("%d ",p);
}
p++;
}
p=n;
printf("\n");
}
else if(hang>n)
{
for (int i = 0; i < hang-n; ++i)
{
printf(" ");
}
for (int i = 0; i < 2*n-hang-1; ++i)
{
if(p>=10)
{
printf("%d",p);
}
else
{
printf("%d ",p);
}
p--;
}
for (int i = 0; i < 2*n-hang; ++i)
{
if(p>=10)
{
printf("%d",p);
}
else
{
printf("%d ",p);
}
p++;
}
p=n;
printf("\n");
}
}
}