题目描述
小杰正在读一本电子书。该书的文件由n页组成,编号从1到n。屏幕当前显示页面x的内容,小杰想要读取页面y。书上有两个按钮,允许小杰向前或向后滚动d页(但他不能在书外滚动)。例如,如果书由10页组成,并且d = 3,那么从第一页开始,小杰可以通过按下其中一个按钮滚动到第一页或第四页; 同理从第二页可以到第一页或第五页; 从第六页到第三页或第九页; 从第八到第五页或第十页。
帮助小杰计算按下按钮移动到第y页所需的最少次数。
输入
输入一个整数 t (1≤t≤103),代表样例数目
每一个样例有四个整数 n, x, y, d (1≤n,d≤109, 1≤x,y≤n) ,中间用空格分开,分别表示电子书的总页数,当前页数,要到达的页数,每次滚动的页数
输出
如果小杰能够从x页翻到y页的话,就输出最少按动按钮次数,否则输出-1
样例输入
3
10 4 5 2
5 1 3 4
20 4 19 3
样例输出
4
-1
5
参考代码
#include<stdio.h>
int main()
{
int t;
int n,x,y,d,ans;
scanf("%d",&t);
while(t>0)
{
scanf("%d%d%d%d",&n,&x,&y,&d);
int a;
if(x<y)
a=y-x; else
a=x-y;
if(a%d==0)
ans=a/d; else if(a%d!=0)
{
int cnt=0;
if((y-1)%d==0)
{
if((x-1)%d==0)
cnt=(x-1)/d; else
cnt=(x-1)/d+1;
ans=cnt+(y-1)/d;
} else if((n-y)%d==0)
{
if((n-x)%d==0)
cnt=(n-x)/d; else
cnt=(n-x)/d+1;
ans=cnt+(n-y)/d;
} else
ans=-1;
}
printf("%dn",ans);
t--;
}
return 0;
}
解析
暂无