找整除--全国模拟(二)

[编程题] 找整除
时间限制: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 }
原文地址:https://www.cnblogs.com/qqky/p/6985027.html