困顿奶牛
题意
即将三个数排成升序所用的最小步骤与最大步骤
做法
分类讨论
-
已经排好了,最小 \(0\) 步,最大 \(0\) 步。
-
任意两个之间有空位,最小 \(1\) 步(另个数直接插入中间), 最大就是一个点一个点移动
-
都不满足,最小 \(2\) 步(另外两个数靠拢任意数),最大也是一个点一个点移动。
注意
计算距离时记得减一。
代码
#include <bits/stdc++.h>
using namespace std;
int a, b, c;
int d1, d2; // 存储距离
int main()
{
cin >> a >> b >> c;
d1 = b - a - 1;
d2 = c - b - 1; // 求两个的距离
if (d1 == 0 && d2 == 0)
{
cout << 0 << endl
<< 0; // 已完成排序,输出0
}
else if (d1 == 1 || d2 == 1) // 1 3 5
{
cout << 1 << endl; // 两头牛之间有空位,最短为1
// cout << d2;
if (d1 - d2 > 0) // 1 3 6
{
// 判断是左边大还是右边大
cout << d1;
}
else // 6 9 11
{
cout << d2;
}
}
else
{
// Default
cout << 2 << endl; // 114 514 1919810 -> 513 514 515
// cout << d1;
if (d1 - d2 > 0)
{
cout << d1; // 第一段比第二段大
}
else
{
cout << d2; // 第一段比第二段小
}
}
}
尾声
- 最近题解都做的少了,原因是
都在写博客。
感觉不会,就随手做下。