【蓝桥】软件校内模拟赛(二)反倍数 题目+题解

文章目录

  • 前言
  • 反倍数
    • 题目描述

前言

本题解为第十一届软件类校内模拟赛个人题解,但非官方满分题解,因此,可能存在下列问题

题意理解错误,导致答案错误。
代码中存在一些问题,导致答案错误。
算法复杂度的分析有误,导致不能在规定时间内得出结果。
因报名属于软件类,故本篇题解全部由 C++ 语言完成,第一次进行校内模拟,没有想到无法查看题目,且木得官方题解,因此题目名称是根据问题描述总结(已忘记题目原名称qwq)。

因此蒟蒻在此提供思路为主,附有非题解代码,如有出错(很有可能)欢迎大佬们指正,祝大佬们们在正赛中取得好成绩。

反倍数

题目描述

定三个整数 a, b, c,如果一个整数既不是 a 的整数倍也不是 b 的整数倍还不是 c 的整数倍,则这个数称为反倍数。请问在 1 至 n 中有多少个反倍数。

输入格式
  输入的第一行包含一个整数 n。
  第二行包含三个整数 a, b, c,相邻两个数之间用一个空格分隔。
输出格式
  输出一行包含一个整数,表示答案。
样例输入
30
2 3 6
样例输出
10
样例说明
  以下这些数满足要求:1, 5, 7, 11, 13, 17, 19, 23, 25, 29。
评测用例规模与约定
  对于 40% 的评测用例,1 <= n <= 10000。
  对于 80% 的评测用例,1 <= n <= 100000。
  对于所有评测用例,1 <= n <= 1000000,1 <= a <= n,1 <= b <= n,1 <= c <= n。

这个数据比较小也好整,遍历一遍扫一下用%法取得胜利√

代码:

#include
typedef long long ll;
const int inf = 10000000 + 10;
const int sz = 100010;
using namespace std;
#define ri register int
inline void rd(int &x){
	char c=getchar();bool f=0;x=0;
	while(c>'9'||c<'0'){if(c=='-')f=1;c=getchar();}
	while(c<='9'&&c>='0'){x=x*10+c-'0';c=getchar();}
	if(f) x*=-1;}
inline void we(int x){
	if(x<0) putchar('-'),x*=-1;
	if(x/10) we(x/10);
	putchar(x%10+'0');}
int n,t,a,b,c;
int ans,sum,num;
int main()
{
	//std::ios::sync_with_stdio(false);
	rd(n);
	rd(a);rd(b);rd(c);
	for(ri i=1;i<=n;++i)
	{
		if(i%a!=0&&i%b!=0&&i%c!=0)
		num++;
	}
	cout<<num;
	return 0;
}

方法千万条,AC第一条,这里所写的都仅供参考,以大赛官方为准啦,在此摆出以供大佬取其精华,去其糟粕,祝诸位大佬们节节高!

你可能感兴趣的:(==乱七八糟集合==,考试+笔记)