https://www.liuchuo.net/archives/1431
贪心
https://www.liuchuo.net/archives/1319
2n皇后
https://www.liuchuo.net/archives/1284
龟兔赛跑
1、为了解决Fibonacci数列值过大的问题
需要在递归的过程中对10007取模
F[1] = F[2] = 1;
for (int i = 3; i <= 1000000; i++) {
F[i] = (F[i - 1] + F[i - 2]) % 10007;
}
2、cout<<hex<<i<<endl; //输出十六进制数
cout<<setiosflags(ios::uppercase)<<hex<<x; 输出大写的A
cout<<oct<<i<<endl; //输出八进制数
cout<<dec<<i<<endl; //输出十进制数
cout<<bin<<i<<endl; //输出二进制数
// 输出16进制, setbase(int)可以设置8等。
cout << setbase(16) << i << endl;
setioflags(ios::scientific) 指数表示
setiosflags(ios::left) 左对齐
setiosflags(ios::right) 右对齐
setiosflags(ios::skipws 忽略前导空白
setiosflags(ios::uppercase) 16进制数大写输出
setiosflags(ios::lowercase) 16进制小写输出
setiosflags(ios::showpoint) 强制显示小数点
setiosflags(ios::showpos) 强制显示符号
//使用bitset转换二进制
void BinaryBitset(int n)
{cout<<bitset<sizeof(int)*8>(n)<<endl; }
或者
#include<cstdio>
#include <iostream>
#include <bitset>
using namespace std;
int main() {
for(int i=0;i<=31;i++)
{
bitset<5> a(i);
cout<<a;
if(i!=31)
cout<<endl;
}
return 0;
}
3、#include
fixed是固定的意思 precision是精度的意思 setw是宽度的意思
setfill是填充的意思
ios是输入输出流 flags是标志的意思
double a=1.23456789;
cout<<setprecision(4)<<a 表示输出数a的4位有效数字
cout<<setiosflags(ios::fixed)<<setprecision(4)<<a 表示输出数a的4位小数
double b=10;
cout<<setfill('*')<<setw(8)<<b ;输出b的时候占8个位 不够的欧诺个*填充
4、字符图形 :
https://www.liuchuo.net/archives/3426
输出 printf("%c",‘A’+abs(i-j))
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
5、max_element
在头文件 #include 中,返回的是迭代器,所以输出值的话要在前面加 *
(2)三个参数cmp可写可不写, max_element() 和 min_element() 默认是从小到大排列,然后 max_element() 输出最后一个值, min_element() 输出第一个值,但是如果自定义的 cmp 函数写的是从大到小排列,那么会导致 max_element() 和min_element() 的两个结果是对调的
(3) 可以用于 vector 或者 vector 等,也可以用于 int arr[4] 或者string arr[4] ,也可以用于结构体vector或者结构体数组~
struct node { int x, y;};
bool cmp1(node a, node b) { return a.x > b.x;}
int main() {
vector<int> v(3);
int arr[4];
vector<node> v1(3);
cout << *max_element(v.begin(), v.end());
cout << *min_element(arr, arr + 4);
cout << (*max_element(v1.begin(), v1.end(), cmp1)).y; return 0;}
6、十六进制转换从十进制
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main() {
string s;cin>>s;
int len = s.length();
long long sum = 0;
for (int i = 0; i < len; i++)
{
if (isalpha(s[i])) {sum = sum * 16 + s[i] - 'A' + 10;}
else {sum = sum * 16 + s[i] - '0';}
}
cout << sum;
return 0;
}
7、十进制转换成十六进制
#include <iostream>
using namespace std;
int main() {
int a;
cin >> a;
int i = 0;
char b[100];
do{if (a % 16 >= 10)
b[i++] = a % 16 + 'A' -10;
else
b[i++] = a % 16 + '0';
a = a / 16;
}while (a != 0) ;
for (int k = i - 1; k >= 0; k--)
cout << b[k];
return 0;
}
8、更简便的方法 进制转化
cin>>oct>>s;
cout<<setiosflags(ios::uppercase)<<oct<<x;
9、String和字符数组的转换
字符数组转化成string类型
char ch [] = "ABCDEFG"; string str(ch);//也可string str = ch; 将string类型转换为字符数组 char buf[10]; string str("ABCDEFG"); length = str.copy(buf, 9); buf[length] = '\0'; 或者 char buf[10]; string str("ABCDEFG"); strcpy(buf, str.c_str());//strncpy(buf, str.c_str(), 10);
9、 大小写转换
1)
让字符数组全部大写:strupr
全部小写:strlwr
char str1[100],str2[100];
gets(str1);
gets(str2);
strlwr(str1);
strlwr(str2);
2)
char ch1=tolower(str1[0]);
char ch1=toupper(str1[0]);
Tolower、toupper不改变自身
3)Transform
string str;
cin>>str;
///转小写
transform(str.begin(),str.end(),str.begin(),::tolower); //::toupper大写
10、Time
#include <stdio.h>
#include <time.h>
int main()
{ clock_t t1, t2;
t1 = clock(); //for循环开始前
for (int i=0; i<10000000; i++){}
t2 = clock(); //for循环结束
double t = (double)(t2-t1)/CLOCKS_PER_SEC;
printf("start:%ld\n", t1);
printf("end:%ld\n", t2);
printf("for循环CPU所经过的秒数:%lf\n", t);
return 0;
}
11、矩阵的零阶矩阵是单位阵
12、
13、memcpy(b,a,sizeof(a)); 将a元素的值都付给b
14、nth_element(b+x,b+k-1,b+y);对b元素x到y个排序找出第k大个数