训练第一天

//预先思考一遍,把自己的思路敲下来,看别人的代码即使看懂了,事后也能打出来,但是时间一久就没有印象了,但是自己想的就不一样了,思考的过程不会变的,自己想的永远不会忘掉,可以看别人的想法,但是少一点看别人的的代码



1:对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:



00000


00001


00010


00011


00100


请按从小到大的顺序输出这32种01串。
输入格式
本试题没有输入。
输出格式
输出32行,按从小到大的顺序每行一个长度为5的01串。
样例输出
00000
00001
00010

00011

思路:不要想太复杂了,把它一行一行分解开来,再把一行分成一列一列,每一列都是:0 和 1;所以只要每一列输出0 和 1 就行了,然后输出一行,然后输出32行就行了,运用到for循环就行了;

#include<stdio.h>

int main()

{

    

    for(int i=0;i<=1;i++)

        for(int j=0;j<=1;j++)

            for(int k=0;k<=1;k++)

                for(int a=0;a<=1;a++)

                    for(int b=0;b<=1;b++)

                        printf("%d%d%d%d%d\n",i,j,k,a,b);

}

2:问题描述 

打印

* * *

* * *

* * *

#include<stdio.h>

int main()

{

    int n;

    scanf("%d",&n);

    for(int i=1;i<=n;i++){

        for(int j=1;j<=n;j++){

            printf("* ");

        }

        printf("\n");

     }

}

3:打印

     * * *

   * * *

 * * *

#include<stdio.h>

int main()

{

    int n;

    scanf("%d",&n);

    for(int i=1;i<=n;i++){//控制行数n行;

        for(int j=1;j<=n-i;j++){//n=2;i=2时,不用输出空格;后面的空格不用去管;只要考虑前面的空格就行了;

            printf(" ");

        }

        for(int k=1;k<=n;k++)

            printf("*");

        printf("\n");

    }

    }


4:打印:

         *

       * * *

     * * * * * 

   * * * * * * *

 * * * * * * * * *

#include<stdio.h>

int main()

{

    int n;

    scanf("%d",&n);

    for(int i=1;i<=n;i++){//和上题一模一样;后面的空格不用去管;只要考虑前面的空格就行了;

        for(int j=1;j<=n-i;j++){

            printf(" ");

        }

        for(int k=1;k<=2*i-1;k++)

            printf("*");

        printf("\n");

    }

}


5:打印:

***********

  *******

   *****

    ***

     *



#include<stdio.h>

int main()

{

    int n;

    scanf("%d",&n);

    for(int i=1;i<=n;i++){//和上题一模一样;后面的空格不用去管;只要考虑前面的空格就行了;

        for(int j=1;j<=i;j++){

            printf(" ");

        }

        for(int k=1;k<=2*(n-i)-1;k++)

            printf("*");

        printf("\n");

    }

}


6:打印:

       * * * * *
     * * * * * * * 
   * * * * * * * * *
 * * * * * * * * * * *
* * * * * * * * * * * *    

#include<stdio.h>

int main()

{

    int n;

    scanf("%d",&n);

    for(int i=1;i<=n;i++){//和上题一模一样;后面的空格不用去管;只要考虑前面的空格就行了;

        for(int j=1;j<=n-i;j++){

            printf(" ");

        }

        for(int k=1;k<=2*i+3;k++)

            printf("*");

        printf("\n");

    }

}

7:打印:

   ****   

  *    *  

 *      * 

**********

思路:预先打印第一行和最后一行


建立一个坐标系一样,两旁的星点可以用两个方程式表示;先确定范围;

#include<stdio.h>

int a[100][100]={0};//定义一个二维数组,把每一个都当做一个坐标,注意数组开始是以0开始的,即第一个坐标为a[0][0];

int main()

{

    int n;

    scanf("%d",&n);

    for(int i=n-1;i<2*n-1;i++)   //打印第一行星点,以1表示为星点

    {

        a[0][i]=1;

    }

    for(int j=0;j<3*n-2;j++)   //打印第二行星点

    {

        a[n-1][j]=1;

    }

    for(int x=0;x<n;x++)   //打印左边的星点

    {

        for(int y=0;y<n;y++)

        {

            if(x+y==n-1)  //左边的星点所代表的方程式

            a[x][y]=1;

        }

    }

    for(int x=0;x<n;x++)

    {

        for(int y=0;y<3*n-2;y++)  //打印右边的星点

        {

            if(y-x==6)

                a[x][y]=1;

        }

    }

    for(int x=0;x<n;x++)  //输出星点,把1替换掉,注意这儿的y的范围,x表示的是有多少行,y表示的是有多少列,

    {

        for(int y=0;y<3*n-2;y++)

        {

            if(a[x][y]==1)

                printf("*");

            else

                printf(" ");

        }

        printf("\n");

    }

    return 0;

    

}





猜你喜欢

转载自blog.csdn.net/huangluping12345/article/details/79937272