打印各种图案(未整理完全)

1. 输出正方形图案

Time Limit: 1 Sec  Memory Limit: 2 MB
Submit: 927  Solved: 666
[Submit][Status][Web Board]

Description

输出用“*”组成的正方形图案,例如

输入5,输出

*****

*****

*****

*****

*****

输入3,输出

***

***

***

输入1,输出

*

 

Input

输入一个整数n,n在1~5之间。

 

Output

输出边长为n个“*”组成的正方形图案。

 

Sample Input

5

Sample Output

*****

*****

*****

*****

*****

#include <stdio.h>
int main()
{
    int n,i,j;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
            printf("*");
        printf("\n");
    }
}

2.关于三角形

(1)一半的

1. 对于本题的一般做法是先找出 总行数 行数 空格 + 这四者之间的关系。

2.发现总框架是一行一行的来,所以说行数是最外层循环控制换行,并且这里的行数一般是从1开始的。

3.一般当空格或者+变化趋势与行数的变化趋势不同的时候,比如这里是空格,这样控制空格的变量一般必须要有总行数与单个行的联系来不断凑出这个数字,有时候这个数字还要扩大来不断的凑。

方法一:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
    int i,j;
    int n;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        for(j=0;j<n-i;j++)\\这里是总行数与单个行数来凑数字
        {
            printf(" ");
        }
        for(j=0;j<2*i-1;j++)
        {
            printf("+");
        }
        printf("\n");
    }
    return 0;
}

方法二:(坐标法)

注意坐标法排列的顺序是从上到下从左向右

#include <stdio.h>
#include <stdlib.h>//这个为abs的头文件

int main()
{
    int n;
    int x,y;
    scanf("%d",&n);
    for(y=n-1;y>=0;y--)\\这里要注意x与y到底谁为大循环**这里y必须从正数开始,不可从负数开始到0,如果从负数开始的话,图形将倒过来**
    {
        for(x=-(n-1);x<=(n-1);x++)
        {
            if(abs(y)+abs(x)>=n&&x>0)\\这里要注意结束条件,因为没有空格所以要break;
                break;
            else
            {
                if(abs(y)+abs(x)<=(n-1))
                    printf("+");
                else
                    printf(" ");
            }
        }
        printf("\n");
    }
    return 0;
}

(2)对称的

Input

输入为多个整数n,0<n<100。当n为0时结束输入。

Output

若n为偶数,则输出一个正向的n层等腰三角形;n为奇数,则输出一个倒向的n层等腰三角形。三角形由“+”组成。任意两个图形之间有一个空行分隔,格式见sample。

Sample Input

5 4 0

Sample Output

+++++++++

  +++++++

    +++++

      +++

        +

      +

    +++

  +++++ 

+++++++

方法一:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i,j,n;
    while(scanf("%d",&n)&&n!=0)
    {
        if(n%2!=0)
        {
            for(i=1; i<=n; i++)
            {
                for(j=0; j<i-1; j++)
                    printf(" ");
                for(j=0; j<2*n-(2*i-1); j++)
                {
                    if(j==2*n-(2*i-1)-1)
                        printf("+\n");
                    else
                        printf("+");
                }
            }
            printf("\n");
        }
        else
        {
            for(i=1;i<=n;i++)
            {
                for(j=0;j<n-i;j++)
                    printf(" ");
                for(j=1;j<=2*i-1;j++)
                {
                    if(j==2*i-1)
                        printf("+\n");
                    else
                        printf("+");
                }
            }
            printf("\n");
        }
    }
    return 0;
}

//我爱坐标法

 

各种菱形(oj关了,题目有空再补)

1.*型的

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main()
{
    int n,x,y;
    scanf("%d",&n);
    for(x=-n;x<=n;x++)
    {
        for(y=-n;y<=n;y++)
        {
            if(x+y>n)
                break;//后面没有空格,就直接break
            else if(abs(x)+abs(y)<=n)
                printf("*");
            else
                printf(" ");
        }
        printf("\n");
    }

}

2.数字型的

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main()
{
    int n,x,y;
    scanf("%d",&n);
    for(x=-(n-1);x<=(n-1);x++)
   {
       for(y=-(n-1);y<=(n-1);y++)
       {
           if(x+y>(n-1))
            break;
           else if(abs(x)+abs(y)<=(n-1))
            printf("%d",n-abs(x)-abs(y));
           else
            printf(" ");
       }
       printf("\n");
   }
}

加强版

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main()
{
   int x,y,n;
   scanf("%d",&n);
   for(x=-(n-1);x<=(n-1);x++)
   {
       for(y=-(n-1);y<=(n-1);y++)
       {
           if(x==0||y==0)
            printf("1");
           else if(abs(x)+abs(y)<=(n-1))
            printf("%d",abs(x)+abs(y));
           else
            printf(" ");
       }
       printf("\n");
   }
}

空心菱形

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main()
{
    int n,x,y;
    scanf("%d",&n);
    for(x=-n;x<=n;x++)
    {
        for(y=-n;y<=n;y++)
        {
            if(x+y>n)
                break;
            else if(abs(x)+abs(y)==n)//只有边边有*
                printf("*");
            else
                printf(" ");
        }
        printf("\n");
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值