找整除--全国模拟(二)
[编程题] 找整除
时间限制:1秒
空间限制:32768K
牛牛想在[a, b]区间内找到一些数满足可以被一个整数c整除,现在你需要帮助牛牛统计区间内一共有多少个这样的数满足条件?
输入描述:
首先输入两个整数a,b,(-5*10^8 ≤ a ≤ b ≤ 5*10^8) 接着是一个正整数c(1 <= c <= 1000)
输出描述:
输出一个整数表示个数。
输入例子:
0 14 5
输出例子:
3
解题思路:本题采用正常的步骤算,会超时
1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 int a; 7 int b; 8 int c; 9 while(cin>>a>>b>>c) 10 { 11 int count = 0; 12 for(int i=a;i<=b;i++) 13 { 14 if(i%c == 0) 15 count++; 16 } 17 cout<<count<<endl; 18 return 0; 19 } 20 }
正确解题思路:定义find函数求出[x,y]区间能够被c整除的个数
如果a b同号,判断a、b的大小,然后调用find函数即可
如果a、b异号,判断a、b哪个是负数,结果为find(1,正数)+find(负数,-1)+1(0)
1 #include <iostream> 2 using namespace std; 3 //找到x y区间可以被c整除的个数 4 int find(int x,int y,int c) 5 { 6 int sum = (y-x)/c; 7 if(x%c==0||y%c==0) sum++; 8 return sum; 9 } 10 int main() 11 { 12 int a; 13 int b; 14 int c; 15 while(cin>>a>>b>>c) 16 { 17 int num = 0; 18 if((a >> 31) == (b >> 31))//同号 19 { 20 if(a>b) 21 { 22 num = find(b,a,c); 23 } 24 else 25 { 26 num = find(a,b,c); 27 } 28 } 29 else 30 { 31 if(a>b) 32 { 33 num = find(1,a,c)+find(b,-1,c)+1; 34 } 35 else 36 { 37 num = find(1,b,c)+find(a,-1,c)+1; 38 } 39 } 40 41 cout<<num<<endl; 42 43 } 44 }