【问题描述】
一头大象决定去看朋友,大象住在直线坐标0的位置,而它的朋友则住在直线坐标x(1≤|x|≤106)的位置,大象每走一步可以跨越1、3、5、...、2m-1中的任何一个数字位置,其中1≤m≤106,那么大象到达朋友处最少需要走多少步?
【输入形式】
输入为一行两个整数x、m,x表示大象朋友所住的位置,m为一个整数。
【输出形式】
输出为一个整数,表示大象到达朋友处最少需要的步数。
【样例输入1】
5 3
【样例输出1】
1
【样例输入2】
12 3
【样例输出2】
4
#include <iostream>
using namespace std;
int main(){
long long int x,m;
cin>>x>>m;
if (x<=2*m-1){ //if,else分两种情况讨论,一种是家在2*m-1这个范围内的,另一种超出
if (x%2==0){ //在这两种分类中又各有两种情况,一种情况是偶数步数,因为每次都
cout<<"2"; 需要走奇数步数,所以需要走两次才能成为偶数,若是奇数便可一次走完
}
else cout<<"1";
}
else{
int flag = 0;
int count = 0;
flag = x%(2*m-1); //先看超出了多少步,用超出的步数套用if的情况,偶走两步奇走一步。
if(flag%2==0){
count = 2;
}
else {
count = 1;
}
count+=x/(2*m-1); //再用家的位置除以最大能走步数表示走了多少次最大步进行相加
cout<<count;
}
return 0;
}