蓝桥杯基础知识记录

蓝桥杯基础知识记录

规模太大怎么办

对于能够使用公式求和的方式就尽量使用公式(PS:记录我死在了暴力循环求1-n的和上)

保留小数点后x位

//我们需要导入一个库,在()中输入需要保留的位数
#include<iomanip>
#include<iostream>
int main(){
	cout << setiosflags(ios::fixed) << setprecision(7) << x << endl;
}

关于圆周率π的使用

#include<iostream>
#include<math.h>
#define PI acos(-1)
int main(){
	cout << PI;
}

关于二进制字符输出

这是题目的源码,让我来解释一下,bitset中的用来指定输出参数的位数(PS:虽然我这里有点复杂,sizeof是用来取其()中的类型的字节数,毕竟如果泛化的话x可以是double或float之类的),(x)是要输出的数字

#include <iostream>
#include <bitset>
using namespace std;
int main(){
	int x;
	for(x=0;x<32;x++){
		cout<<bitset<sizeof(1)/4*5>(x)<<endl;
	} 
	return 0;
}

关于规律题出现

我在做基础训练3的时候遇到的,这是一个规律题,鉴于这是开放题,请读者勤快一点自己看看吧。
我们对于规律必须仔细辨认,千万不要没有读懂就写!!!,没读懂的代价就是在一定的极端情况下我们难以保障代码的正确性,尤其是像某些ACM比赛中提交错误会扣时,一定要考虑啊!!!

c++关于最大值最小值的定义

但是在编译时他出现了一些问题,显示了一个warning:[Warning] “INT_MAX” redefined,原因竟然是这个在c++中是已经有定义的!!!,大家可以直接用,INT_MIN和INT_MAX

#define INT_MAX 0x7fffffff
#define INT_MIN 0x80000000

对于i++和++i的辨析

i++的操作是在其他操作后面的,而++i则在其他操作前面,就用最简单的赋值举例子,当i=1时,如果res=i++,那么res=1,而res=++i的话,res=2


对于自己要用的函数不知道在那个库时

这边给您一个网传的万能库

#include<bits/stdc++.h>

当stream流效率不够时

建议使用原生态的scanf和printf,似乎是这两个的效率不cin和cout效率高,当你的时间无法达到要求是,可以使用这个(PS:有时候你要是不会读取整行字符串时,可以尝试使用scanf,有效果哦)

三目运算符x1?x2:x3

首先声明,这玩意儿实在是我目前为止太少用到,所以记录一下
对于这个三目运算形式如上所示,以及作用为:当x1为真时计算x2表达式的值,为假时计算x3表达式的值

赋值运算符

对于这段,和上面三目一样,为了记录这个我太少用到的
赋值运算符有很多,如下:

符号含义说明例子
&=按位与相当于a=a&b比如9&5,相当于(00001001)&(00000101)=(00000001)
|=按位或相当于a=a|b比如9
^=按位异或相当于a=a^b异或就是:1^1=0,1^0=1,0^0=0,0^1=1;比如9^5相当于(00001100)
>>=右移赋值相当于将运算数的二进制数向右移动两位a=a<<4比如a=00000011,过后便是00110000,相当于原值乘以 2 4 2^{4} 24
<<=左移赋值相当于将运算数的二进制数向左移两位a=a>>4比如a=15(00001111),过后就是00000011这个不能单纯的以乘除计算,因为他可能溢出

关于字符串的读取

我们可以使用gets()函数读取字符串,可以用getchar()函数读取回车,以及getline()函数读取整行字符串

char str[]
gets(str)将输入的字符串读入到str数组中
getchar()读取用于换行的回车
getline()读取整行字符串

关于素数的判断

我在网上看到有三种方法:

  1. 暴力破解法:直接遍历一遍2-n-1,看是否能够被整除
bool isPrime_1(int n){
	for(int i=2;i<n;i++)
		if(n%i==0&&i<n)	return 0;	//注意2是质数 
	return 1;
} 
  1. 小范围暴力破解法:由于因数必定是一个大于 n \sqrt n n 一个小于 n \sqrt n n ,因此我们只需要遍历2- n \sqrt n n 即可
bool isPrime_2(int n){
	for(int i=2;i<int(sqrt(n)+1);i++)
		if(n%i==0){
			return 0;
		}	
	return 1;
}
  1. 这个方法是我看来的,是通过关于一个素数的性质,素数必定在6的倍数两侧,但是注意,6的倍数的两侧不一定是素数,因此我们还需要增加一个判断,但是这个性质为我们的步长从1变成了6,大大的缩小了范围
bool isPrime_3(int n){
	if(n==2||n==3)	return 1;
	if(n%6!=1&&n%6!=5)	return 0;
	for(int i=5;i<=floor(sqrt(n));i+=6)
		if(n%i==0||n%(i+2)==0)	return 0;
	return 1;
}

PS:这个代码我是从别人的博文上面摘的,毕竟这个东西应该是没有必要在在即写一遍了的,但是尊重作者附上链接:素数的四种判断方法
注:这玩意儿今晚只做了这么多,下次还要继续写!!!

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值