B. Problem B.契约(contract.cpp)
内存限制:256 MiB
时间限制:1000 ms
标准输入输出
题目类型:传统
评测方式:文本比较
题目描述:
「璃月」是「契约」的国度。
摩拉克斯认为,如果一个数是 a 的倍数或 b 的倍数,且不是 a 与 b 的积的倍数,那么这个数就是一个「契约数」。
他希望你为他计算出小于等于 n 的所有正整数中,「契约数」的数量。
输入格式:
三个整数 n,a,b。
输出格式:
一个整数,表示小于等于 n 的所有正整数中,「契约数」的数量。
样例:
【样例 1 输入】
7 2 3
【样例 1 输出】
3
【样例 2 输入】
4782 38 27
【样例 2 输出】
294
【样例 3 输入】
4903 78 4
【样例 3 输出】
1241
数据范围与提示:
【样例解释 #1】
当 a=2,b=3 时,小于等于 7 的正整数中共有 3 个「契约数」,分别为 2,3 和 4 。
【数据范围】
对于 20% 的数据,保证 a=1。
对于 60% 的数据,1<=n<=100 ,1<=a,b<=20。
对于 100% 的数据,1<=n<=5000, 1<=a,b<=100。
思路:
这道题非常的简单,连第一题都不如,就不讲那么细致了!
首先,我们需要定义一个计数器用来统计契约数的个数sum,初始化为0,然后看题意,这道题就一个意思,在1~n之间找出所有满足条件的契约数,我们可以运用for循环进行查找,只要满足(i%a==0||i%b==0)&&(i%(a*b)!=0)就代表是一个契约数。
如果是契约数,那么就将计数器sum进行++操作。
循环结束过后,输出sum即可。
代码:
#include<bits/stdc++.h> //万能头文件
using namespace std; //允许使用std类
int main(){ //main主函数
int n,a,b,sum=0; //定义
cin>>n>>a>>b; //输入
for(int i=1;i<=n;i++) //for循环遍历
if((i%a==0||i%b==0)&&i%(a*b)!=0) //条件判断
sum++; //计数器+1
cout<<sum<<endl; //输出计数器
return 0; //结束
}
总结:
这道题非常的简单,考的就是if语句的判断。