• 蛇形矩阵求坐标


    题目:

      输入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)
    ", 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)
    ", 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
    ", 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	", a[i][j]);
            }
            printf("
    ");
        }
    
        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
    ", s);
    
        return 0;
    }

      

  • 相关阅读:
    20200302 数据分析之numpy以及Jupyter
    20200228 scrapy高级使用及分布式
    20200226 请求库selenium
    20200224 爬虫-requests模块
    0219 请求上下文解析与g对象
    Matlab矩阵求导和求梯度有什么不同
    矩阵中范数的处理方式
    如何巧妙地使用递归
    遗传算法求最短路径
    nparray的维度和取值方式
  • 原文地址:https://www.cnblogs.com/qifeng1024/p/11830428.html
Copyright © 2020-2023  润新知