1. 判断素数的算法
https://blog.csdn.net/huang_miao_xin/article/details/51331710(按定义来的那种)
https://blog.csdn.net/gfvod/article/details/51487506(米勒罗宾,有点高级)
https://blog.csdn.net/u011036919/article/details/62044677(筛选法)
2. 一些好用的函数
/**************************************************************/
//字符串倒置
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
string str;
getline(cin, str);
reverse(str.begin(), str.end());
cout << str;
system("pause");
return 0;
}
/**************************************************************/
//大小写转换(不知道为什么,在有#include<iostream>时,没有这个头文件也能用)toupper,tolower;
#include<ctype.h>
str2[i] = toupper(str2[i]);//必须是字符
str2[i] = tolower(str2[i]);
/**************************************************************/
//数字变字符串
#include<string>
str=to_string(a);//(str字符串,a数字)
/**************************************************************/
//得到某类型的最大最小值
#include<limits.h>
int max = INT_MIN; /* 用最小值初始化 */
int min = INT_MAX; /* 用最大值初始化 */
long long a = LLONG_MAX;
/**************************************************************/
//
/**************************************************************/
//
/**************************************************************/
//
3. PAT乙级1015
vector的使用;
sort的妙用(cmp);
迭代器的使用,注意printf里用的(->)而不是(.);
记住scanf、printf比cin、cout省时间;
4. 输出格式
//头文件
#include <iomanip>
//保留小数后两位
cout << setprecision(2) << fixed << num;
5.插入排序和归并排序
插入排序:是迭代算法,逐一获得输入数据,逐步产生有序的输出序列。每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置。如此迭代直到全部元素有序。
归并排序:进行如下迭代操作:首先将原始序列看成 N 个只包含 1 个元素的有序子序列,然后每次迭代归并两个相邻的有序子序列,直到最后只剩下 1 个有序的序列。
算法题目超链接https://blog.csdn.net/u011036919/article/details/66472703
6.求最大公约数
long long gong(long long a, long long b)
{
long long c = 0;
while (a%b != 0)
{
c = a%b;
a = b;
b = c;
}
return b;
}
7.特定情况下四舍五入的小技巧
背景:输出的行数实际上是列数的50%(四舍五入取整)。
//int row,col;
row = (col + 1) / 2;
8.比较巧妙的一道题(PAT1040)
https://blog.csdn.net/u011036919/article/details/66475196
9.sscanf和sprintf的搭配使用
https://blog.csdn.net/u011036919/article/details/68065100
10.printf
//d:整数;5:预留5个位置;0:预留的位置填0
printf(" %05d", num);
11.位运算
与&;
或|;
异或^;
左移<<;
右移>>;
12.一些STL用法
stack<int> ans;
vector<int> rev;
ans.push(p->val);
ans.pop();
ans.top();//只是读,不会拿出来
ans.empty();
rev.push_back(ans.top());
//map的遍历
//使用m.size()可以得知map里放了几个东西;
map<string,int> m;
map<string,int>::iterator it;
it = m.begin();
while(it != m.end()){
//it->first;
//it->second;
it ++;
}
//set的使用
[C++中set的用法](https://www.cnblogs.com/omelet/p/6627667.html)
[简单例子](https://blog.csdn.net/u011036919/article/details/81743580)
13.全排列
字符串的排列
14.约瑟夫环
孩子们的游戏
15.回溯法
矩阵中的路径
16.BFS
迷宫寻路
17.DFS
地下迷宫(DFS,BFS均有编程,但BFS的未完成)
幸运的袋子
数字和为sum;求和(非递归;递归;两版本)
18.动态规划
暗黑的字符串
19.进制转换(超简单)
进制转换
16.剑指OFFER精选
1、二叉树和递归(前序:根左右;中序:左根右;后序:左右根)
树的子结构
重建二叉树
二叉树中和为某一值的路径(DFS)
序列化二叉树
2、位操作(别人的分析也很有意思)
变态跳台阶
二进制中1的个数
不用加减乘除做加法
3、链表
合并两个排序的链表
4、堆栈
栈的压入、弹出序列
当时没好好看,必须重新编程
https://blog.csdn.net/u011036919/article/details/70876352