蛇形矩阵求坐标

题目:

  输入w m n三个数,w是矩阵宽度,m和n分别为矩阵里面的两个数;

  输出值为两个数之间的距离(不能走直线)

  矩阵按舌形排列

  例如:

  输入 w 为 6   m 为 2   n 为 8 则矩阵为:

  1      2     3    4    5   6
  12   11   10   9    8   7
  13   14   15   16   17   18
  24   23   22   21   20   19

  那么 8 和 2 之间的距离为 4

 

 

解题思路:

  先分别求出两个点的坐标,用坐标相减取绝对值再相加,即为两个点的距离

  求坐标时,要考虑到蛇形排列中偶数行倒序排列的特殊情况

 

#include <stdio.h>

int main()
{
    int w = 0;    //宽度
    int val = 0;    //输入数值
    int val_1 = 0;    //输入数值2
    scanf("%d %d %d", &w, &val,&val_1);

    int x = 0, y = 0;//横纵坐标

    y = ((val - 1) / w) + 1; //该值所在纵坐标(第几行)

    if (y % 2 == 1)    //如果该行为奇数行
    {
        x = val - (y - 1)*w;
    }
    else  //如果为偶数行
    {
        x = val - (y - 1)*w;
        x = w - x + 1;
    }

    printf("第一个数的坐标为:(%d,%d)\n", x, y);


    int xx = 0, yy = 0;

    yy = ((val_1 - 1) / w) + 1; //该值所在纵坐标(第几行)

    if (yy % 2 == 1)    //如果该行为奇数行
    {
        xx = val_1 - (yy - 1)*w;
    }
    else  //如果为偶数行
    {
        xx = val_1 - (yy - 1)*w;
        xx = w - xx + 1;
    }
    printf("第二个数的坐标为:(%d,%d)\n", xx, yy);

    int sum = 0, sunm = 0, s = 0;
    sum = (xx - x);
    if (sum < 0){ sum = -sum; }
    sunm = (yy - y);
    if (sunm < 0){ sunm = -sunm; }
    s = sum + sunm;
    printf("两个数之间的距离为:%d\n", s);

    return 0;
}

 

 

第二种方法:声明一个数组,按照该方法全部填充进去,再利用查找方法找到该值对应的下标得到距离

#include <stdio.h>

int main()
{
    int a[100][100] = { NULL };
    int w, m, n;
    scanf("%d %d %d", &w, &m, &n);


    int k = 1;
    for (int i = 0; i < 100;i++)
    {
        if (((i+1) % 2) != 0)
        {
            for (int j = 0; j < w; j++)
            {
                a[i][j] = k;
                k++;
            }
        }
        else
        {
            for (int j = w-1; j >= 0; j--)
            {
                a[i][j] = k;
                k++;
            }
        }
    }

    for (int i = 0; i < 10;i++)
    {
        for (int j = 0; j < w; j++)
        {
            printf("%d\t", a[i][j]);
        }
        printf("\n");
    }

    int x, y;
    for (int i = 0; i < 100; i++)
    {
        for (int j = 0; j < w; j++)
        {
            if (a[i][j]==m)
            {
                x=i+1;
                y=j+1;
                break;
            }
        }
    }

    int xx, yy;
    for (int i = 0; i < 100; i++)
    {
        for (int j = 0; j < w; j++)
        {
            if (a[i][j] == n)
            {
                xx=i+1;
                yy=j+1;
                break;
            }
        }
    }

    int sum = 0, sunm = 0, s = 0;
    sum = (xx - x);
    if (sum < 0){ sum = -sum; }
    sunm = (yy - y);
    if (sunm < 0){ sunm = -sunm; }
    s = sum + sunm;
    printf("两个数之间的距离为:%d\n", s);

    return 0;
}

 

 

  

posted @ 2019-11-10 15:30  祁峰_1024  阅读(748)  评论(0编辑  收藏  举报