A. 特殊电梯

描述

有一个非常特殊的电梯。
一次操作只能从当前楼层上升1,3,5层,或者下降1,3,5层。楼层不能小于1,所以你不能执行让电梯下降到1层以下的操作。比如,当前楼层为4,你不能选择下降5层。
小晨想要从a层到达b层,你能帮她找到最少需要多少次操作吗?

输入

每个数据包含多个测试用例。第一行包含测试用例的数量T(1≤T≤1000)。然后是测试用例的描述。
每个用例由一行组成,其中包含两个整数a和b--当前楼层与期望楼层。

输出

对于每个测试用例,输出一个整数——最小操作数。

样例

3
4 1
5 14
3 9
1
3
2

提示

对于30%的数据:1≤a,b≤10
对于100%的数据:1≤a,b≤10^9

CODE

不知道几分的WA代码

#include <bits/stdc++.h>
using namespace std;

int t, a, b, minn;

void dfs(int l, int c){
    if(l < 1){
        return ;
    }
    if(c >= minn){
        return ;
    }
    if(l == b){
        minn = c;
        return ;
    }
    dfs(l - 1, c + 1);
    dfs(l - 3, c + 1);
    dfs(l - 5, c + 1);
    return ;
}

int main(){
    scanf("%d", &t);
    while(t--){
        scanf("%d%d", &a, &b);
        if(a < b){
            swap(a, b);
        }
        minn = 1e9 + 10;
        dfs(a, 0);
        printf("%d\n", minn);
    }
    return 0;
}

AC代码

#include <bits/stdc++.h>
using namespace std;

int t, a, b, minn;

int main(){
    scanf("%d", &t);
    while(t--){
        minn = 0;
        scanf("%d%d", &a, &b);
        int l = abs(a - b);
        minn += l / 5;
        l = l % 5;
        while(l % 2 == 0 && l+5 <= abs(a - b)){
            l += 5;
            minn--;
        }
        minn += l / 3;
        l = l % 3;
        while(l != 0 && l % 2 == 0 && l+3 <= abs(a - b)){
            l += 3;
            minn--;
        }
        minn += l;
        printf("%d\n", minn);
    }
    return 0;
}
posted @ 2020-10-02 23:17  LT-Y  阅读(153)  评论(0)    收藏  举报