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

[编程题] 找整除

时间限制: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 }
时间: 2024-07-28 16:11:13

找整除--全国模拟(二)的相关文章

shell 模拟二维数组解析配置文件

前几日项目组内出shell OJ题进行练习, 题目大概为: 现有配置文件conf.ini如下,编写shell,输入title和key,输出其值, 如输入FIFO1 a1 ,则输出11 #this is a config file [FIFO1] a1=11 b1=12 c1=13 [FIFO2] a2=21 b2=22 c2=23 [FIFO3] a3=31 b3=32 c3=33 恰因这几日内在学习数组的用法,故使用shell来模拟二维数组,现博客之,以飨同学,共研讨. 注:本解法未考虑性能,

HDU 4588 Count The Carries(找规律,模拟)

题目 大意: 求二进制的a加到b的进位数. 思路: 列出前几个2进制,找规律模拟. #include <stdio.h> #include <iostream> #include <algorithm> #include <string.h> #include <math.h> #include <stack> #include <vector> using namespace std; int main() { int

C++动态数组简单模拟二叉堆

//C++动态数组简单模拟二叉堆 #include<iostream> using namespace std; class BinaryHeap { private: int cap; //数组最大容量 int size; //当前元素个数 int* datas; //数组首地址 public: explicit BinaryHeap(int cap_) :cap(cap_), size(0) { datas = new int[cap]; } ~BinaryHeap(){ delete d

最长公共连续子串--全国模拟(二)

[编程题] 最长公共连续子串 时间限制:1秒 空间限制:32768K 牛牛有两个字符串(可能包含空格),牛牛想找出其中最长的公共连续子串,希望你能帮助他,并输出其长度. 输入描述: 输入为两行字符串(可能包含空格),长度均小于等于50. 输出描述: 输出为一个整数,表示最长公共连续子串的长度. 输入例子: abcde abgde 输出例子: 2 自己的解题思路:针对两个字符串,定义函数GetEqualCount来求得对于字符串long从L_start开始与字符串short比较得到的最长公共连续子

洛谷 P1509 找啊找啊找GF(复习二维费用背包)

传送门 题目背景 "找啊找啊找GF,找到一个好GF,吃顿饭啊拉拉手,你是我的好GF.再见." "诶,别再见啊..." 七夕...七夕...七夕这个日子,对于sqybi这种单身的菜鸟来说是多么的痛苦...虽然他听着这首叫做"找啊找啊找GF"的歌,他还是很痛苦.为了避免这种痛苦,sqybi决定要给自己找点事情干.他去找到了七夕模拟赛的负责人zmc MM,让她给自己一个出题的任务.经过几天的死缠烂打,zmc MM终于同意了. 但是,拿到这个任务的sqy

南阳OJ-138 找球号(二)(hash表应用)

找球号(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描述 在某一国度里流行着一种游戏.游戏规则为:现有一堆球中,每个球上都有一个整数编号i(0<=i<=100000000),编号可重复,还有一个空箱子,现在有两种动作:一种是"ADD",表示向空箱子里放m(0<m<=100)个球,另一种是"QUERY",表示说出M(0<M<=100)个随机整数ki(0<=ki<=100000100),分

NYOJ 138 找球号(二)哈希表

找球号(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描述 在某一国度里流行着一种游戏.游戏规则为:现有一堆球中,每个球上都有一个整数编号i(0<=i<=100000000),编号可重复,还有一个空箱子,现在有两种动作:一种是"ADD",表示向空箱子里放m(0<m<=100)个球,另一种是"QUERY",表示说出M(0<M<=100)个随机整数ki(0<=ki<=100000100),分

【luogu2038】【noip2014】无线网络发射器选址 [模拟][二维前缀和]

P2038 无线网络发射器选址 这个题有很多种做法 然后就可以练很多小的算法 技巧啥的嘿嘿 首先是模拟 要开一个为128+40为边长的数组 然后枚举在20~148内以(i,j)为中心的正方形 然后再挨个挨个计算sum 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define rg register 4 #define ll long long 5 const int N=200; 6 int n,d,mp[N][N]; 7 templ

省选模拟二十九 题解

T1 考场上只想到了枚举拆三元环,拿到60pts 发现其实有一个性质没有用到: 保证将这  个点移除后,剩余的图将不存在环. 假设黑点为没有被钦定的点,白点反之 三白的情况无解 那么一个三元环只能由二黑一白/二白一黑组成, 后者已经固定了,直接选,而前者并不是很好处理 首先对黑白点分别求出子图的Top序(由于是竞赛图,所以Top序是严格的) 接着对于每个黑点处理出它到白点的一个序列(设W->B=1,B->W=0) 把序列按照白点Top序排序 考虑什么样的x才是不合法的 当且仅当存在一个0在1的