题目描述
Color of balloons:Green
给你三个数a,b,k,请你找出[a,b]中k的倍数.
Description in English:
Give you three numbers a, b, k, please find out how many numbers are multiples of k between [a, b] .
输入
三个数依次为k, a, b.其中1≤k≤1018, 0≤a≤b≤1018
Input:
3 numbers follows as k,a,b. (1≤k≤1018, 0≤a≤b≤1018)
输出
一个数字代表答案。
Output:
1 integer.
样例输入
2 0 4
样例输出
3
第一种
#include<stdio.h>
int find(long long k,long long a,long long b) {
long long count=0;
long long i;
if(a==0) count=1; //0是任何数的倍数
if(k>b) return count;
if(k<a) {
for(i=a; i<=b; i++) {
if(i%k==0) count+=1;
}
return count;
}
if(k<=b&&k>=a) {
for(i=k; i<=b; i++) {
if(i%k==0) count+=1;
}
return count;
}
}
int main () {
long long a,b,k;
scanf("%lld %lld %lld",&k,&a,&b);
printf("%lld",find(k,a,b));
return 0;
}
第二种
#include<stdio.h>
int find(long k, long long a, long long b){
long long count =0,i;
for(i=0; i*k<=b; i++)
{
if(i*k>=a)
count++;
}
return count;
}
int main () {
long long a,b,k;
scanf("%lld %lld %lld",&k,&a,&b);
printf("%lld",find(k,a,b));
return 0;
}
第三种
#include <stdio.h>
#include <stdlib.h>
int main() {
long long int k,a,b,sum;
scanf("%lld%lld%lld",&k,&a,&b);
sum=0;
if(b<0){
a=-a;
b=-b;
long long t=a;
a=b;
b=t;
}
sum=b/k-a/k;
if(a%k==0||a<=0){
sum++;
}
printf("%lld",sum);
return 0;
}
第一种与第二种时间复杂度高,第三种方案算法最优秀