选取一个样例 4 7 20 分析:
01 02 03 04——第一行
08 07 06 05——第二行
09 10 11 12——第三行
16 15 14 13——第四行
17 18 19 20——第五行
…
1.两行 两行为一组,分为奇数行和偶数行
2.数分为能被宽度(width)整除和不能被宽度(width)整除两类
求某个数(x)的行数 使用自定义line函数
if(x%width==0) line_x= x/width
if(x%width!=0) line_x=x/width+1
求某个数(x)的列数 使用自定义row函数
先判断行数奇偶:
奇数行 即 line_x %2!=0
if(x%width!=0) row_x=x%width
else row_x= width //在末尾
偶数行 即 line_x %2==0
if(x%width!=0) row_x=width-x%width+1
else row_x= 1 //在开头
如果已知数x1,x2的行列数
ans=|line_x1-line_x2|+|row_x1-row_x2|
//采用math.h里面的fabs绝对值函数
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int line(int x,int width)
{
int f;
if(x%width!=0) f=x/width+1;
else f=x/width;
return f;
}
int row(int x,int width,int line_x)
{
int f;
if(line_x%2!=0){
if(x%width!=0){
f=x%width;
}
else f=width;
}
else {
if(x%width!=0){
f=width-x%width+1;
}
else f=1;
}
return f;
}
int main()
{
int width,m,n,ans;
while(scanf("%d",&width)!=EOF){ //需要输入多组数据
scanf("%d %d",&m,&n);
int line_m,line_n,row_m,row_n;
line_m=line(m,width);
line_n=line(n,width);
row_m=row(m,width,line_m);
row_n=row(n,width,line_n);
ans=fabs(line_m-line_n)+fabs(row_m-row_n);
printf("%d\n",ans);
}
return 0;
}