根据下面数据排列规律,假设1点的坐标为(0,0), x方向向右为正,y方向向下为正, 比如7的 坐标为(-1,-1), 2的坐标为(0,1), 3的坐标为(1,1), 请编程实现输入任意点(x,y)请出这点对应的数据
?
我们可以通过找规律的方式,上图可以知道在左下角y=-x这条线上,该点坐标对应的数为
max =?或 max =?,这两者是一样的。
通过输入的点判断是否在右下角,如果是在右下角的话,则是num?= max - (cy-y)- (x-cx)
否则就是:num = max +(cy-y)+(x-cx)?
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int x,y; //要输入的坐标,分别为x和y
printf("请输入坐标x与y的值:\n");
scanf("x=%d,y=%d",&x,&y);
//根据输入x与y中二者绝对值较大的值,就可以找到左下角对角线点
int max = abs(x) > abs(y)?abs(x):abs(y); //其中abs()为绝对值函数
//此时就可以求出左下角对角线点的坐标以及它的值
int cx = -max,cy = max;//因为在左下角,所以x的坐标是负数且y的坐标是正点
int num = (cx*2)*(cx*2)+1; //计算该点坐标对应的值
int res = 0; //res用来存计算出输入坐标点的值
//判断输入的数是否在右下角---右下角x与y都是大于0的,所以可以得到如下判断条件
if((x > cx) && (y == cy) || (y > -cy) && (x == -cx))
{
//其中(cy - y)是num与要求的数y轴相间隔的距离
//(x - cx)是num 与要求的数x轴相间隔的距离
res = num - (cy - y) - (x - cx);
}
else
{
//如果该数不是在右下角
res = num + (cy - y) + (x - cx);
}
printf("res = %d\n",res);//输出该值
return 0;
}
|