- 基本知识与公式
- 数字与字符串之间的相互转换
- 重载函数模板
- 小根堆与大根堆的定义
- log(a,b)
- 向上向下四舍五入
- lmada表达式
- find函数
0. 基本知识与公式
圆锥已知高和半径求表面积
l=sqrt(h*h+r*r);
S_all=pi*l*r+pi*r*r;
//闰年 能被4整除但不能被100整除 or 能被400整除
if ((x%4==0&&x%100!=0) || x%400==0)
//空格32 回车13 A65 a97 048
// \0 0
1. 数字与字符串之间的相互转换
- 数字转字符串
int u=110;
char s1[110];
//将u转换为字符串
sprintf(s1,"%d",u);//char
printf ("%s\n",s1);
string s2;
s2=to_string(u);//string
cout<<s2<<'\n';
char s3[110],s4[110],s5[110];
sprintf(s3,"0x%X",u);
sprintf(s4,"%x",u);//10进制转换成16进制
//如果输出大写的字母是sprintf(str,"%X",a)
sprintf(s5,"o%o",u);//10转8进制,八进制o或0开头,0容易混淆用得少了
printf ("%s\n%s\n%s\n",s3,s4,s5);
- 字符串转数字
char s1[110]={"12345678910"};
string s2="12345678910";
long long a,b,c;
sscanf (s1,"%lld",&a);//char[]
b=stol(s2.c_str());//string 必须使用.c_str()
//stoi,stol分别对应int long long
cout<<a<<'\n'<<b<<'\n';
2. 重载函数
struct my_pair {//通过重载小于号 实现pair
int x,y;
// bool operator < (const my_pair& a) const{//就当模板背吧 升序
// if (x!=a.x) return x<a.x;
// return y<a.y;
// }
bool operator < (const my_pair& a) const{//就当模板背吧 倒序
if (x!=a.x) return x>a.x;
return y>a.y;
}
};
ps: invalid declarator before …报错一般是结构体后面没加分号
练手题acw.429
3. 小根堆与大根堆的定义
int/double/long long等c++自带类型
priority_queue <int> q;//默认大根堆
priority_queue <int> q1;//int的大根堆定义方法
priority_queue <int,vector <int>,greater<int> >q2;//int的小根堆定义方法
int main (){
int n=9;
for (int i = 1; i <= n; i ++ ){
q1.push(i),q2.push(i);
}
printf ("大根堆的堆顶:%d\n",q1.top());//9
printf ("小根堆的堆顶:%d\n",q2.top());//1
}
pair的定义
typedef pair<int, int> pii;
priority_queue <pii> q1;
priority_queue <pii,vector <pii>,greater<pii>> q2;
int main (){
int n=9;
for (int i = 1; i <= n; i ++ ){
q1.push({i,n-i+1}),q2.push({i,n-i+1});
}
printf ("大根堆的堆顶:%d %d\n",q1.top().first,q1.top().second);//9 1
printf ("小根堆的堆顶:%d %d\n",q2.top().first,q2.top().second);//1 9
}
自定义的结构体实现小根堆大根堆
struct my_pair1 {//通过重载小于号 实现pair
int x,y;
bool operator < (const my_pair1& a) const{//升序 大根堆
if (x!=a.x) return x<a.x;
return y<a.y;
}
};
struct my_pair2 {//通过重载小于号 实现pair
int x,y;
bool operator < (const my_pair2& a) const{//降序 小根堆
if (x!=a.x) return x>a.x;
return y>a.y;
}
};
typedef my_pair1 pii1;
typedef my_pair2 pii2;
priority_queue <pii1> q1;
priority_queue <pii2> q2;
int main (){
int n=9;
for (int i = 1; i <= n; i ++ ){
q1.push({i,n-i+1});
q2.push({i,n-i+1});
}
printf ("大根堆的堆顶:%d %d\n",q1.top().x,q1.top().y);//9 1
printf ("小根堆的堆顶:%d %d\n",q2.top().x,q2.top().y);//1 9
}
4.log(a,b)
double mlog(int a,int b) {//return log_a(b)
double x1=log(a);
double x2=log(b);
return x2/x1;
}
5. 向上向下四舍五入
向上取整:ceil(double x);
向下取整:floor(double x);
四舍五入:round(double);
6.lmada表达式
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> ans;
if (strs.size()==0) return ans;
map <string,string> mp;
for (auto x:strs) {
string t=x;
sort(t.begin(),t.end());
mp[x]=t;
}
sort(strs.begin(),strs.end(),[&](string a,string b) {
if (a.size()!=b.size()) return a.size()<b.size();
return mp[a]<mp[b];
});
vector <string> t;
// function <bool(string,string)> check=[&](string a,string b) {
// if (a.size()!=b.size()) return false;
// return (bool)(mp[a]==mp[b]);
// };
for (int i=0;i<strs.size();i++) {
int j=i+1;
t.push_back(strs[i]);
while (j<strs.size() and mp[strs[i]]==mp[strs[j]]) {
t.push_back(strs[j]);
j++;
}
if (j-i>1) {
i=j-1;
}
ans.push_back(t);
t.clear();
}
return ans;
}
};