图案打印

图案打印

时间: 1ms        内存:64M

描述:

一年一度的植树节就要到了,计算机学院学生准备在学院教学楼门前的空地上种植树木。为使树木排列得更加美观,大家决定把树木排列成菱形。现在告诉你我们所拥有的树木能排列成边长为N的菱形,请你编程输出树木所排列的图案(用*号代表树木)。

输入:

一个整数N(1≤N≤10)。

输出:

排列成菱形图案的*号。请注意在图案中:每行树木之间无空行,每列树木之间均有一个空列。

示例输入:

3

示例输出:

    *
  *   *
*       *
  *   *
    *

提示:

参考答案(内存最优[748]):

#include<stdio.h>
int main()
{
	int i,j,n;
	scanf("%d",&n);
	for(i=0;i<2*n-1;i++)
	{
		for(j=0;j<2*n-1;j++)
		{
			if((j-i==n-1) || (i+j == 3*n-3)){
				printf("*");
			}else if((i-j == n-1) || (i+j==n-1)){
				printf("* ");
			}else{
				if(j-i<=n-1 && i+j <= 3*n-3){
					printf("  ");
				}
			}
		}
		if(i<2*n-2)printf("\n");
	}
	return 0;
}

参考答案(时间最优[0]):

#include<stdio.h>
#include<string.h>
int map[40][40];
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
		int i,j;
        memset(map,0,sizeof(map));
        int m=2*n-2;
        for(i=0; i<n; i++)
        {
            map[i][m-2*i]=1;
            map[i][m+2*i]=1;
            for(int j=m+2*i+1; j<4*n-3; j++)
                map[i][j]=-1;
        }

        for( i=0; i<n; i++)
        {
            for( j=0; j<4*n-3; j++)
            {
                if(map[i][j]==-1)
                    break;
                if(map[i][j]==0)
                    printf(" ");
                else
                    printf("*");
            }
            printf("\n");
        }
        for( i=n-2; i>=0; i--)
        {
            for( j=0; j<4*n-3; j++)
            {
                if(map[i][j]==-1)
                    break;
                else if(map[i][j]==0)
                    printf(" ");
                else
                    printf("*");
            }
            //if(i!=0)
            printf("\n");
        }
    }
    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注