2018.5.19(打印矩阵)------宏观调整

打印矩阵

转圈打印矩阵

描述:
这里写图片描述

代码1

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

int main()
{
    int n,m;
    while(cin>>n>>m)
    {
        int rectangle[n+1][m+1];

        memset(rectangle,0,sizeof(rectangle));

        int numberectangle=1;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                rectangle[i][j]=numberectangle++;

        printf("******************\n");
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
                printf("%d ",rectangle[i][j]);
            printf("\n");
        }
        printf("******************\n");

        int total=1;
        int x=1,y=0;
        while(total<=n*m)
        {
            while(y+1<=m&&rectangle[x][y+1]!=0)
            {
                y++;
                printf("%d ",rectangle[x][y]);
                rectangle[x][y]=0;
                total++;
            }
            while(x+1<=n&&rectangle[x+1][y]!=0)
            {
                x++;
                printf("%d ",rectangle[x][y]);
                rectangle[x][y]=0;
                total++;
            }
            while(y-1>=1&&rectangle[x][y-1]!=0)
            {
                y--;
                printf("%d ",rectangle[x][y]);
                rectangle[x][y]=0;
                total++;
            }
            while(x-1>=1&&rectangle[x-1][y]!=0)
            {
                x--;
                printf("%d ",rectangle[x][y]);
                rectangle[x][y]=0;
                total++;
            }
        }
        printf("\n");
    }
    return 0;
}

代码2

#include<iostream>
#include<cstdio>
using namespace std;

int main()
{
    int n,m;
    while(cin>>n>>m)
    {
        int a=1,b=1;
        int c=n,d=m;
        int rectangle[n+1][m+1];

        int number=1;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                rectangle[i][j]=number++;

        printf("**************\n");
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
                printf("%d ",rectangle[i][j]);
            printf("\n");
        }
        printf("**************\n");

        while(a<=c&&b<=d)
        {
            if(a==c)
            {
                for(int i=b;i<=d;i++)
                    printf("%d ",rectangle[a][i]);
                break;
            }
            for(int i=a;i<=d;i++)
                printf("%d ",rectangle[a][i]);
            for(int i=a+1;i<=c;i++)
                printf("%d ",rectangle[i][d]);
            for(int i=d-1;i>=b;i--)
                printf("%d ",rectangle[c][i]);
            for(int i=c-1;i>a;i--)
                printf("%d ",rectangle[i][b]);
            a++,b++;
            c--,d--;
        }
        printf("\n");
    }
    return 0;
}

旋转打印正方形矩阵

描述:
这里写图片描述
题解:
这里写图片描述
四个点进行交换,1到4位置,4到16位置,16到13位置,13到1位置;
同理2和3相应的四个点,外圈交换完后,方框向内走,直到不能构成一个正方形;

#include<iostream>
#include<cstdio>
using namespace std;

int main()
{
    int n,m;
    while(cin>>n>>m)
    {
        int a=1,b=1;
        int c=n,d=m;
        int rectangle[n+1][m+1];

        int number=1;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                rectangle[i][j]=number++;

        printf("**************\n");
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
                printf("%d ",rectangle[i][j]);
            printf("\n");
        }
        printf("**************\n");

        while(a<=c&&b<=d)
        {
            if(a==c)
            {
                for(int i=b;i<=d;i++)
                    printf("%d ",rectangle[a][i]);
                break;
            }
            for(int i=a;i<=d;i++)
                printf("%d ",rectangle[a][i]);
            for(int i=a+1;i<=c;i++)
                printf("%d ",rectangle[i][d]);
            for(int i=d-1;i>=b;i--)
                printf("%d ",rectangle[c][i]);
            for(int i=c-1;i>a;i--)
                printf("%d ",rectangle[i][b]);
            a++,b++;
            c--,d--;
        }
        printf("\n");
    }
    return 0;
}

“之”字形打印矩阵

描述:
这里写图片描述

#include<iostream>
#include<cstdio>
using namespace std;

int main()
{
    int n,m;
    while(cin>>n>>m)
    {
        int rectangle[n+1][m+1];

        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                cin>>rectangle[i][j];

        int down_x=2,down_y=1;
        int right_x=1,right_y=2;
        int flag=1;

        printf("%d ",rectangle[1][1]);
        while(down_x!=right_x)
        {
            if(flag&1)
            {
                int a=right_x,b=right_y;
                while(a<=down_x)
                {
                    printf("%d ",rectangle[a][b]);
                    a++,b--;
                }
            }
            else
            {
                int a=down_x,b=down_y;
                while(a>=right_x)
                {
                    printf("%d ",rectangle[a][b]);
                    a--,b++;
                }
            }
            if(right_y+1<=m)
                right_y++;
            else
                right_x++;
            if(down_x+1<=n)
                down_x++;
            else
                down_y++;

            flag++;
        }
        printf("%d\n",rectangle[down_x][down_y]);
    }
    return 0;
}

有序矩阵找数

这里写图片描述

#include<iostream>
#include<cstdio>
using namespace std;

int main()
{
    int n,m;
    while(cin>>n>>m)
    {
        int rectangle[n+1][m+1];

        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                cin>>rectangle[i][j];
        int num;
        while(cin>>num)
        {
            if(num==0)
                break;

            int a=1,b=m;
            bool flag=0;
            while(a<=n&&b>=1)
            {
                flag=(rectangle[a][b]==num)?1:0;
                if(flag)
                    break;

                a=(rectangle[a][b]>num)?a:a+1;
                b=(rectangle[a][b]>num)?b-1:b;

            }
            if(flag)
                printf("(%d,%d)\n",a,b);
            else
                printf("No Found!\n");
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/violet_ljp/article/details/80374485