和数学相关的
//两直线交点坐标
假设有两条直线 : y=ax+b y=cx+d
则 : x1=d-b/a-c y1=ax1+b
如果𝑎,𝑏均是正整数且互质,那么由𝑎𝑥+𝑏𝑦,𝑥≥0,𝑦≥0不能凑出的最大数是(𝑎−1)(𝑏−1)−1
最小公倍数*最大公约数=两个数的乘积
和数学无关的
取出int x的每位数字
int t = x % 10;
x /= 10;
//将字符数字转为数字
int x = 0;
for (int i = 0; i < str.size(); i ++ )
x = x * 10 + str[i] - '0';
完全二叉树每层的开头为2^(n-1),结尾为2^n-1
tolower(string a)//把字符串a中的字母都转化为小写
toupper(string a)//把字符串a中的字母都转化为大写
getline(cin,a)可以读取空格(cin不能)
ASCII码 A=65,a=97
//去除行末空格 : 先输出空格,再输出内容
if (path!=1) cout<<" ";
else cout<<st;
作为判定条件时
if (char[i]!=0)成立,if (string[i]!=0)不成立
string a;
while (cin>>a);//一直输入直到遇到空格或者输入完成
for (int i=0;a[i];i++)//一直循环直到字符串结束
for (int i=s.size()-1;s[i]=='0';i--) n--;//末尾有几个0,n就减几,遇到其他数字结束循环
if(a[i]>='0' && a[i]<='9')//筛查字符串a中是否包含数字
if(a[i]>='a' && a[i]<='z')//筛查字符串a中是否包含小写字母
if(a[i]>='A' && a[i]<='Z')//筛查字符串a中是否包含大写字母
//质数筛
int primes[N],cnt;
bool st[N];
int get_primes(int n)
{
for (int i = 2; i <= n; i ++ )
{
if (!st[i])
primes[cnt ++ ] = i;
for (int j = 0; primes[j] <= n / i; j ++ )//这里为防止溢出的写法
{
st[primes[j] * i] = true;
if (i % primes[j] == 0) break;
}
}
}
//判断日期是否合法
int months[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool check(int data)
{
int year=data/10000;
int month=data/100%100;
int day=data%100;
if(month==0||month>12||day>31||day==0) return false;
if(month==2){
bool flag=year%400==0||(year%4==0&&year%100!=0);
if(day>flag+28) return false;
}
else if(day>months[month]) return false;
}
//网格题常用偏移量判断方向,本质是多维数组
int dx[] = {-1,0,1,0};
int dy[] = {0,1,0,-1};//四个偏移量 上右下左
int x=0,y=0,d=1;//起点(0,0) 方向为右
for (int i = 1; i <= n*m; i ++ )
{
st[x][y]=i; //当前位置计数
int a=x+dx[d]; //走下一格
int b=y+dy[d]; //走下一格
if(a<0||a>=n||b<0||b>=m||st[a][b])//撞墙或者走到重复格子
{
d=(d+1)%4; //换方向
a=x+dx[d],b=y+dy[d];
}
x=a,y=b; //如果没有撞墙或者走重复格子,让xy更新
}