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;
}
没有未来的未来不是我想要的未来

浙公网安备 33010602011771号