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

前言

本题解为第十一届软件类校内模拟赛我的题解,但非官方满分题解,所以,可能存在下列问题ios

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

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

反倍数

题目描述

定三个整数 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。
svg

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

代码:code

#include<bits/stdc++.h>
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第一条,这里所写的都仅供参考,以大赛官方为准啦,在此摆出以供大佬取其精华,去其糟粕,祝诸位大佬们节节高!xml