hpu--1715

1715: 感恩节KK专场——2015年的第一场雪

时间限制: 1 Sec   内存限制: 128 MB
提交: 865   解决: 76
[ 提交][ 状态][ 讨论版]

题目描述

下雪了,KK学长站在三教门口,看学弟学妹们堆雪人。突然KK学长发现一个神奇的规律:春秋大道上能被k整除的位置都会有一个雪人。现在KK学长想知道春秋大道的[x, y]区间里面有多少个雪人。

输入

给定一个整数t,表示有t(t<=6000)组测试数据。每组测试数据有三个整数k(k非0且|k|<=2^30),x,y(x<=y且|x|,|y|<=2^30)。

输出

每行输出一个整数,表示雪人的个数。

样例输入

11 1 2

样例输出

2

解体思路:需要考虑区间端点的正负情况.当k为负数时,将其化正,接着就考虑区间的正负性了,当区间含负区间和正区间时,则分成两段考虑.其他情况则看为一段区间.具体见代码


代码如下:
#include<stdio.h>
#include<string.h>
int check(int n1,int m1,int n2,int m2){
	if(m1==0&&m2==0)return n2-n1+1;
	else if(m1!=0&&m2==0)return n2-n1;
	else if(m1==0&&m2!=0)return n2-n1+1;
	else if(m1!=0&&m2!=0)return n2-n1;
}
int main(){
	int t,k,x,y,te,ty;
	int n1,m1,n2,m2;
	scanf("%d",&t);
	while(t--){
		ty=0;
		scanf("%d%d%d",&k,&x,&y);
        if(k<0)k=-k;
        if(x<=0&&y<=0){
        	te=-1*x;
			x=-1*y;
			y=te;
        }
        else if(x<0&&y>0){
        	ty=1;
        	te=-1*x;
        	x=1;
        }
	    n1=x/k;
	    m1=x%k;
	    n2=y/k;
	    m2=y%k;
	    int sum;
		sum=check(n1,m1,n2,m2);
	    if(ty){
	    	sum+=check(0,0,te/k,te%k);
	    }
	    printf("%d\n",sum);
	}
	return 0;
}



你可能感兴趣的:(hpu--1715)