[蓝桥杯2015初赛]移动距离

在这里插入图片描述
在这里插入图片描述
选取一个样例 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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

衣谷金锋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值