55--寻找倍数

xiaoxiao2021-02-28  97

题目描述

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.其中1k1018 0ab1018

Input:

3 numbers follows as k,a,b. (1k1018 0ab1018)

输出

一个数字代表答案。

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; } 第一种与第二种时间复杂度高,第三种方案算法最优秀

转载请注明原文地址: https://www.6miu.com/read-62066.html

最新回复(0)