题目:
输入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; }
原文:https://www.cnblogs.com/qifeng1024/p/11830428.html