代码实现矩阵转置
样例输入
2 4
34 76 -54 7
-4 5 23 9
样例输出
34 -4
76 5
-54 23
7 9
代码:
int main()
{
int m, n;
int a[20][20];
int i, j;
cin >> m >> n;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
cin >> a[j][i];
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
cout << a[i][j-1] << " ";
}
cout << endl;
}
return 0;
}
闰年判断
if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0))
monthDays[1] = 29;
else
monthDays[1] = 28;
排序算法 平均时间复杂度 最好情况 最坏情况 空间复杂度 排序方式 稳定性
插入排序 O(n²) O(n) O(n²) O(1) In-place 稳定
冒泡排序 O(n²) O(n) O(n²) O(1) In-place 稳定
选择排序 O(n²) O(n²) O(n²) O(1) In-place 不稳定
快速排序 O(n log n) O(n log n) O(n²) O(log n) In-place 不稳定
希尔排序 O(n log n) O(n log n) O(n log n) O(1) In-place 不稳定
堆排序 O(n log n) O(n log n) O(n log n) O(1) In-place 不稳定
归并排序 O(n log n) O(n log n) O(n log n) O(n) Out-place 稳定
————————————————
全排列函数的使用
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
int a[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int res = 0;
do
{
int x1 = a[0] + a[1] + a[2] + a[3];
int x2 = a[3] + a[4] + a[5] + a[6];
int x3 = a[6] + a[7] + a[8] + a[0];
__________________;
} while (next_permutation(a, a + 9));
cout << res / 3 / 2 << endl;
return 0;
}
结构体数组内部元素的排序
struct Node
{
int s, c, d;
bool operator<(const Node &t) const
{
if (s != t.s)
return s < t.s;
if (c != t.c)
return c < t.c;
return d < t.d;
}
} sum[MAXN];
当不知道两个数谁大谁小时,可以写代码
if(a>b) swap(a,b);
数位DP
重点:
> 主要是写一个函数统计从1~n,数字i出现了多少次
# include <iostream>
# include <cmath>
using namespace std;
int dgt(int n) // 计算整数n有多少位
{
int res = 0;
while (n) ++ res, n /= 10;
return res;
}
int cnt(int n, int i) // 计算从1到n的整数中数字i出现多少次
{
int res = 0, d = dgt(n);
for (int j = 1; j <= d; ++ j) // 从右到左第j位上数字i出现多少次
{
// l和r是第j位左边和右边的数字分别组成的整数 ; dj是第j位的数字
int p = pow(10, j - 1), l = n / p / 10, r = n % p, dj = n / p % 10;
//如果要统计的数字大于0,
if (i) res += l * p;// 这里的l所有的情况是0~l-1,左边如果是l的话,右边就不能取到p种情况了
//如果要统计的数字等于0,那么数字j左边就不能全为0,否则数字不成立,所以左边就少了全为0这种情况
if (!i && l) res += (l - 1) * p; // 如果i = 0, 左边高位不能全为0(左边所有情况 001 ~ l - 1)
// 计算第j位左边的整数等于l (视频中xxx = abc)的情况
if ( (dj > i) && (i || l) ) res += p;
if ( (dj == i) && (i || l) ) res += r + 1;//(这里加的一是加的右边全是0的情况)
}
return res;
}
int main()
{
int a, b;
while (cin >> a >> b , a)
{
if (a > b) swap(a, b);
for (int i = 0; i <= 9; ++ i) cout << cnt(b, i) - cnt(a - 1, i) << ' ';
cout << endl;
}
return 0;
}